c# - 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)
重载。但是,它没有详细解释在创建的任务和执行上下文差异方面会发生什么。
解决方案
推荐阅读
- laravel - 自定义注册控制器中的 Laravel 电子邮件验证不起作用
- python-3.x - 为什么 Keras 会告诉我“ValueError: setting an array element with a sequence”。尽管所有数组都是 numpy 数组?
- node.js - Linux Node JS 在端口 80 上侦听,但不在其他端口上
- mysql - 计算日期之间的平均、最小、最大间隔
- css - 样式相同但颜色可变的div
- jquery - 滚动时的jQuery动画粘性标题 - 交换图像问题
- python - 为什么 numpy.polynomial.laguerre.laggauss 不能使用超过 185 点进行积分
- java - 需要帮助理解 logcat 消息 ClassCastException
- python - Pyephem 本地时间问题
- ios - 使用 Alamofire 将图像作为 base64String 上传