为什么要使用任务.run围绕简单的async方法调用创建新任务



这是我正在处理的某些代码中看到的模式:

result = await Task.Run(async () => await MyAsynchronousMethod());

,我看不到这是什么做的,这是不做的:

result = await MyAsynchronousMethod();

这里打算完成的以前的结构是什么?

Task.Run在线程池上启动一个将执行async方法的任务。因此,在第一种情况下,async方法本身将在背景线程上调用。

在第二种情况下,MyAsynchronousMethod方法将像任何其他非轴向方法一样在调用线程上同步运行,直到击中await。此可能至少在一段时间内阻止调用线程,具体取决于如何实现异步方法。

有一些实现的示例async方法可以阻止调用线程他们击中await并在UI应用程序中的调度程序线程上调用此类方法可能会冻结应用程序。

最新更新