这是我在某些代码中看到的模式:
result = await Task.Run(async () => await MyAsynchronousMethod());
并且我没有看到这样做不起作用:
result = await MyAsynchronousMethod();
这里的前建筑有什么意义?
答案 0 :(得分:3)
Task.Run
在线程池上启动将执行async
方法的任务。所以在第一种情况下,async
方法本身将在后台线程上调用。
在第二种情况下,MyAsynchronousMethod
方法将在调用线程上同步运行,就像任何其他非异步方法一样,直到它到达await
。这个可能阻塞调用线程,至少暂时一段时间,具体取决于async方法的实现方式。
有一些实现不当的async
方法阻塞调用线程,然后命中await
并在UI应用程序中调度此调度线程上的方法例如冻结应用程序。