C# Fire and Forget 任务和丢弃

Posted

技术标签:

【中文标题】C# Fire and Forget 任务和丢弃【英文标题】:C# Fire and Forget Task and discard 【发布时间】:2020-03-21 16:55:28 【问题描述】:

我需要生火并忘记调用某些异步方法。我意识到 VS 建议我可以将调用设置为 _discard 并且 IDE 警告消失。但是我不确定与丢弃一起使用时是否仍然没有等待该调用。会吗?

 public async Task<object> SomeSideTaskToBeForgotten()
 
     ...blah blah
 

 public async Task MainTask()
 
     ..some stuff
     _ = SomeSideTaskToBeForgotten(); //is this still fire and forget?
     ..some other stuff
 

【问题讨论】:

_ 将丢弃返回的任务而不等待它完成。 _ = await SomeSideTaskToBeForgotten(); 会等待任务然后丢弃结果 另请查看:***.com/q/22629951/1768303 请记住“一劳永逸”的意思是“我不在乎这是否成功”。 @GabrielLuci 不用担心,我实际上不在乎它是否失败并且任务的结果也不重要。谢谢! 【参考方案1】:

是的,它仍然是火灾和忘记。

SomeSideTaskToBeForgotten(); 返回Task 时,您的方法的其余部分将执行,无需等待Task 完成。

丢弃只是明确表明Task 不需要任何进一步的处理。

VS 将推荐丢弃,因为 SomeSideTaskToBeForgotten(); 返回一些东西,即不是 void。

【讨论】:

我认为这里有一个误解。任务结束后不会跳过等待;它将控制权交给调用函数,直到等待的任务返回,直到等待之后的语句继续执行。 @Denis 什么await? OP 的代码中没有await

以上是关于C# Fire and Forget 任务和丢弃的主要内容,如果未能解决你的问题,请参考以下文章

PHP Fire and Forget POST 请求

OwinCommunicationListener 中托管的 Async Web Api 中的 Fire and Forget 方法

Cordova + ngrx/effect fire and forget long running 方法冻结 UI

如何像 WCF 一样实现 Asp.net MVC One Way/Fire And Forget 调用?

Asp.net core web Api Fire and Forget BG task

Python3.7中的Fire、Forget和返回值