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 任务和丢弃的主要内容,如果未能解决你的问题,请参考以下文章
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 调用?