有两种方法
public async Task T1()
{
await Task.Run(() => /*do something here*/);
}
public Task T2()
{
return Task.Run(() => /*do something here*/);
}
它们之间有什么区别吗?
有两种方法
public async Task T1()
{
await Task.Run(() => /*do something here*/);
}
public Task T2()
{
return Task.Run(() => /*do something here*/);
}
我相信第一种变体将等待任务完成(不是通过阻塞线程,而是通过在 Continuation Passing Style 中签署方法的其余部分以在任务完成时执行)。第二个选项则不会。您已经启动并返回了一个任务,但是除非调用 .Wait() 或其他内容,否则您的调用线程将继续运行。
async/await 的东西只是围绕使用 Task 和 continuation passing style 重新编写方法的语法糖,尽管结果通常足够复杂,您不会手动完成它。
Task.Run
通常与误用Task.Run
以异步方式运行“同步代码”的做法相关联。 - spenderTask<something>
,而 T2 返回的是一个非泛型的Task
。 - Dennis_E