[英]Use await for background threads or not?
我目前正在使用async / await关键字,并经历了以下问题: 正确使用Task.Run以及何时仅使用async-await和Async / Await与线程
但是,即使第二个链接也无法回答我的问题,那就是何时使用
Task.Run(...)
与
await Task.Run(...)
是情境还是通过使用await(然后返回到调用方)可以得到什么?
代码Task.Run(...)
(在两个示例中)都将委托发送到线程池,并返回一个包含该委托结果的任务。 这些“结果”可以是实际的返回值,也可以是例外。 您可以使用返回的任务来检测结果何时可用(即,委托完成的时间)。
因此,如果满足以下任一条件 ,则应使用Task
:
如果您的调用代码需要执行上述任何操作,请使用await
:
await Task.Run(...);
长时间运行的后台任务,有时你想要做的那些(例如,检测例外),但你不想做的时候了 ; 在这种情况下,只需保存Task
,然后在应用程序中的其他位置await
它:
this.myBackgroundTask = Task.Run(...);
如果您不需要上述任何一项,则可以执行“射击后遗忘”,如下所示:
var _ = Task.Run(...); // or just "Task.Run(...);"
请注意,真正的“一劳永逸”应用程序极为罕见 。 字面上的意思是“运行此代码,但是我不在乎它是否完成,何时完成或是否成功”。
您可以在使用即发即弃类型处理逻辑时使用Task.Run() ,类似于如果有人订阅了事件则调用事件。 您可以将其用于日志记录,通知等。
如果依赖于方法中执行的结果或操作,则需要使用await Task.Run(),因为它会暂停当前执行直到任务完成。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.