【发布时间】:2022-01-14 21:23:26
【问题描述】:
我一直在试图找出两者之间的区别。
Task.Run(() => DoSomething());
和
Task.Run(async() => await DoSomething());
我一直在测试它,它看起来不会影响功能。如果你想运行一项任务,我真的很困惑使用哪一个。我正在调用等待任务,这只是一个语法糖,还是它们之间有区别。我应该使用哪一个,为什么?我真的很好奇,因为即使我将该任务存储在一个变量中,它仍然会为这两种情况返回一个任务。
我们还有异步方法
private async Task DoSomething()
{
//do something here
}
我在这里找到了一篇很棒的帖子await Task.Run vs await 解释在 GUI 应用程序的事件处理程序中等待异步方法的具体情况,但这仅解释了这之间的区别
await Task.Run(async () => await LongProcessAsync());
还有这个
await LongProcessAsync();
【问题讨论】:
-
事实上,你根本不需要 lambda:
Task.Run(DoSomething);很好,因为DoSomething会像 lambda 一样隐式转换为Func<Task>。 -
您好@JohnathanBarclay,感谢您的评论,如果我使用 Task.Run(DoSomething); 时收到 VS 代码警告的原因是否相同;警告是“由于不等待此调用,因此在调用完成之前继续执行当前方法。考虑将 'await' 运算符应用于调用结果”
-
你必须写
await Task.Run(DoSomething)。 -
@Vladimir 警告与委托无关;它将是从
Task.Run返回的Task。这个example 会显示警告,即使使用了 lambda。
标签: c# asynchronous async-await