小编Dev*_*345的帖子

Task.Yield(); SyncAction(); vs Task.Run(()=> SyncAction());

假设我想快速使以下方法异步运行:

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上.

c# task-parallel-library async-await

5
推荐指数
1
解决办法
637
查看次数

标签 统计

async-await ×1

c# ×1

task-parallel-library ×1