首页 > 解决方案 > Task.Run(Func 应该做什么?) 用于?

问题描述

今天我正在阅读有关 async/await 最佳实践的内容并遇到了这个问题:

https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md#async-void

以前,对于我的即发即弃异步方法,我只是调用该方法并忽略返回的Task

DoSomethingAsync();

编译器会发出有关未等待异步方法的警告,因此我最终添加了一种解决方法来防止它。StackOverflow 中建议了几种方法,例如使用Task.Forget()扩展方法或丢弃。

相反,上面的文章建议:

Task.Run(DoSomethingAsync);

我从未见过Task.Run()需要Func<Task>争论的重载。我查阅了文档,发现它令人困惑。

假设传入了一个异步方法(即定义为async Task DoSomethingAsync()),这是否意味着创建了 2 个任务,一个用于运行异步方法,一个用于包装第一个的代理?还是只有一项任务?

一般来说,这种重载的用例是什么?如果一个方法已经返回 a Task,为什么不等待呢?


编辑:我不觉得这是当正确使用 Task.Run 和当只是 async-await的副本,但它看起来与await task.run 与 await c#非常相似,后者侧重于Task.Run(Func<Task)重载。但是,它没有详细解释在创建的任务和执行上下文差异方面会发生什么。

标签: c#async-await

解决方案


推荐阅读