假设我想快速使以下方法异步运行:
ResultType SynchronousCode(ParamType x)
{
return SomeLongRunningWebRequest(x);
}
Run Code Online (Sandbox Code Playgroud)
以下两个代码示例的执行/计划方式有何不同?
async Task<ResultType> AsynchronousCode(ParamType x)
{
return await Task.Run(() => SomeLongRunningWebRequest(x));
}
Run Code Online (Sandbox Code Playgroud)
相比:
async Task<ResultType> AsynchronousCode(ParamType x)
{
await Task.Yield();
return SomeLongRunningWebRequest(x);
}
Run Code Online (Sandbox Code Playgroud)
我知道Task.Yield()调用将确保线程立即返回到调用者,并且Task.Run()肯定会调度代码在ThreadPool上的某个地方运行,但是这两种方法都能有效地实现该方法异步?让我们假设这个问题我们在默认的SynchronizationContext上.