在另一个线程上async / await有什么好处吗?

时间:2015-03-06 14:22:42

标签: c# .net multithreading asynchronous async-await

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

我认为使用异步API 好处,如果它可以重用Task.Run()提供的线程池线程。我认为这是ASP.NET中async / await的主要好处之一,所以我假设重用线程池线程也是客户端的一个好处。

更新

更新了问题,陈述了 CPU 绑定的工作,正如Stephen指出的那样。我可以看到我的服务使用外部库的异步API的另一个好处,即使我将它包装在我的ViewModel中的Task.Run()中。也就是说,我的服务的任何其他调用者都将免费获得异步,而无需在此时更改实现或单独提供服务。

1 个答案:

答案 0 :(得分:2)

我认为你的意思是CPU限制,而不是I / O限制。

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

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