什么是等待XXAsync()和等待Task.Run(()=> {XX()}之间的实际差异

时间:2016-08-29 08:51:25

标签: c# async-await

通过使用C4C2,我们可以将同步操作转换为任务,以便我们可以使用C3,如下所示:

Task.Run

与此同时,许多方法本身都有异步实现,因此建议直接使用

Task.Factory.StartNew

但两者之间的区别是什么?

1 个答案:

答案 0 :(得分:2)

SomeMethodAsync可能是执行IO工作的方法IO work does not require a thread to work。所以SomeMethodAsync不会导致线程池中的线程只是坐下来等待它完成。线程池线程是服务器应用程序(如ASP.NET应用程序)中的重要资源。在这样的应用程序中,每个请求都由一个线程池线程提供服务,因此可以通过保存这些线程来增加活动请求的数量。

await Task.Run(() => { SomeMethod(); }使用线程池线程来执行SomeMethod方法。如果SomeMethod IO工作,那么你只是不必要地使用了一个线程池线程。