异步/等待和返回任务是相同的吗?

4

有两种方法

public async Task T1()
{
    await Task.Run(() => /*do something here*/);
}

public Task T2()
{
    return Task.Run(() => /*do something here*/);
}

它们之间有什么区别吗?

在调用现场(例如从调用这些方法的人的角度),没有任何区别。 - spender
然而,等待Task.Run通常与误用Task.Run以异步方式运行“同步代码”的做法相关联。 - spender
如果你检查类型,你会发现 T1 实际上返回了一个 Task<something>,而 T2 返回的是一个非泛型的 Task - Dennis_E
第一种方法只是增加了一些开销。在异步模式下运行它并不是必要的。 - M.kazem Akhgary
1个回答

0

我相信第一种变体将等待任务完成(不是通过阻塞线程,而是通过在 Continuation Passing Style 中签署方法的其余部分以在任务完成时执行)。第二个选项则不会。您已经启动并返回了一个任务,但是除非调用 .Wait() 或其他内容,否则您的调用线程将继续运行。

async/await 的东西只是围绕使用 Task 和 continuation passing style 重新编写方法的语法糖,尽管结果通常足够复杂,您不会手动完成它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接