这是我正在处理的某些代码中看到的模式:
result = await Task.Run(async () => await MyAsynchronousMethod());
,我看不到这是什么做的,这是不做的:
result = await MyAsynchronousMethod();
这里打算完成的以前的结构是什么?
Task.Run
在线程池上启动一个将执行async
方法的任务。因此,在第一种情况下,async
方法本身将在背景线程上调用。
在第二种情况下,MyAsynchronousMethod
方法将像任何其他非轴向方法一样在调用线程上同步运行,直到击中await
。此可能至少在一段时间内阻止调用线程,具体取决于如何实现异步方法。
有一些实现的示例async
方法可以阻止调用线程他们击中await
并在UI应用程序中的调度程序线程上调用此类方法可能会冻结应用程序。