C# 在另一个线程上异步/等待有什么好处吗?

C# 在另一个线程上异步/等待有什么好处吗?,c#,.net,multithreading,asynchronous,async-await,C#,.net,Multithreading,Asynchronous,Async Await,我有一个WPF客户端,它使用一个提供异步API支持的外部库,但在使用所述异步方法(如实体物化、解析等)时也执行一些CPU限制的工作。使用异步方法有什么好处吗?因为我希望CPU绑定在另一个线程上工作?不使用Task.Run()调用这些方法会导致一些动画抖动,因为CPU绑定的工作仍在消息循环中的调度程序上进行,但是如果API提供异步支持,我更喜欢使用它而不是同步代码 如果异步API允许重用Task.Run()提供的线程池线程,那么我认为使用异步API会有好处。我认为这是ASP.NET中async/a

我有一个WPF客户端,它使用一个提供异步API支持的外部库,但在使用所述异步方法(如实体物化、解析等)时也执行一些CPU限制的工作。使用异步方法有什么好处吗?因为我希望CPU绑定在另一个线程上工作?不使用
Task.Run()
调用这些方法会导致一些动画抖动,因为CPU绑定的工作仍在消息循环中的调度程序上进行,但是如果API提供异步支持,我更喜欢使用它而不是同步代码

如果异步API允许重用
Task.Run()
提供的线程池线程,那么我认为使用异步API会有好处。我认为这是ASP.NET中async/await的主要好处之一,因此我认为重用线程池线程对客户端也是一个好处

更新


更新了问题,以说明Stephen指出的CPU绑定工作。我可以看到通过我的服务使用外部库的异步API的另一个优点,即使我在ViewModel中将其包装在Task.Run()中。也就是说,我的服务的任何其他调用方都将免费获得异步,而不必在那时更改实现或创建单独的服务。

我假定您的意思是CPU绑定,而不是I/O绑定

Task.Run
使用可重用的线程池线程。这与
async
或ASP.NET无关


在您的用例中,您感兴趣的是保持UI的响应性,但是有一个API使用混合的I/O和CPU方法。在这种情况下,使用
Task.Run
来调用这些API方法是非常合适的。

对于反对者,是因为我没有添加代码,还是因为您认为这个问题不合适?我不明白否决一个诚实的问题。谢谢你回答这个问题。我看不出其他人在哪里问过这个问题,所以我非常感谢你的意见。