【发布时间】:2017-08-20 02:32:10
【问题描述】:
我目前正在研究 async/await 关键字,并遇到了以下问题:When correctly use Task.Run and when just async-await 和 Async/Await vs Threads
然而,即使是第二个链接也没有回答我的问题,即何时简单地使用
Task.Run(...)
对
await Task.Run(...)
是情景还是使用 await 可以获得什么(从而返回给调用者)?
【问题讨论】:
-
像任何其他使用 Task 一样,不等待将导致任务被触发并立即继续执行当前方法,而等待将返回一个任务并将方法的其余部分连接为继续(有效地停止当前方法的执行,直到任务完成)。你想达到什么目的?
-
@AntP 由于我是这些关键字的新手,我只是想了解使用 await 来创建后台线程是否被认为是一种好习惯,而不是直接启动它们,或者如果使用 await Task.Run(...) 更具情境性,然后,我应该在什么情况下这样做?
-
这两件事会产生不同的行为,所以这是有条件的——如果你想返回一个不完整的
Task,可以在堆栈的更上层等待(例如附加额外的延续,处理失败.. .),您将需要等待(或返回)Task.Run返回的任务。如果您想启动任务并忘记它,您不想等待它。 -
@AntP 对,“如果你想启动任务并忘记它,你不想等待它”现在更有意义
标签: c# .net asynchronous async-await