Task.Run() 等待任务的区别
Task.Run() difference for awaitable Task
我一直在努力找出两者之间的区别。
Task.Run(() => DoSomething());
和
Task.Run(async() => await DoSomething());
我一直在测试这个,它看起来不会影响功能。如果您想 运行 一项任务,我真的很困惑该使用哪个。我所说的可等待任务是这只是一个语法糖还是它们之间有区别。我应该使用哪一个,为什么?我真的很好奇,因为即使我将该任务存储在一个变量中,它仍然 returns 两种情况下的任务。
我们还有异步方法
private async Task DoSomething()
{
//do something here
}
我在这里 post 找到了很棒的
解释了在 GUI 应用程序的事件处理程序中等待异步方法的特定情况,但这仅解释了此
之间的区别
await Task.Run(async () => await LongProcessAsync());
还有这个
await LongProcessAsync();
Lambda 表达式在后台创建私有方法。所以这个:
Task.Run(() => DoSomething());
变成这样:
Task.Run(__lambda);
private Task __lambda() => DoSomething();
所以,请问这两行有什么区别:
Task.Run(() => DoSomething());
Task.Run(async() => await DoSomething());
等同于询问这两种方法有什么区别:
private Task __lambda() => DoSomething();
private async Task __lambda() => await DoSomething();
我有a blog post that goes into detail。总结答案是,如果 all 你正在做的只是调用 DoSomething
,那么你可以省略(删除)async
和 await
关键字。如果为简单起见,lambda 正在执行从您的问题中删除的任何其他操作(例如,修改参数),那么我建议保留 async
和 await
关键字。
作为一般准则:任何琐碎的代码都可以省略 async
/await
;任何逻辑都应该使用 async
和 await
.
我一直在努力找出两者之间的区别。
Task.Run(() => DoSomething());
和
Task.Run(async() => await DoSomething());
我一直在测试这个,它看起来不会影响功能。如果您想 运行 一项任务,我真的很困惑该使用哪个。我所说的可等待任务是这只是一个语法糖还是它们之间有区别。我应该使用哪一个,为什么?我真的很好奇,因为即使我将该任务存储在一个变量中,它仍然 returns 两种情况下的任务。
我们还有异步方法
private async Task DoSomething()
{
//do something here
}
我在这里 post 找到了很棒的
await Task.Run(async () => await LongProcessAsync());
还有这个
await LongProcessAsync();
Lambda 表达式在后台创建私有方法。所以这个:
Task.Run(() => DoSomething());
变成这样:
Task.Run(__lambda);
private Task __lambda() => DoSomething();
所以,请问这两行有什么区别:
Task.Run(() => DoSomething());
Task.Run(async() => await DoSomething());
等同于询问这两种方法有什么区别:
private Task __lambda() => DoSomething();
private async Task __lambda() => await DoSomething();
我有a blog post that goes into detail。总结答案是,如果 all 你正在做的只是调用 DoSomething
,那么你可以省略(删除)async
和 await
关键字。如果为简单起见,lambda 正在执行从您的问题中删除的任何其他操作(例如,修改参数),那么我建议保留 async
和 await
关键字。
作为一般准则:任何琐碎的代码都可以省略 async
/await
;任何逻辑都应该使用 async
和 await
.