【问题标题】:C# Fire and Forget Task and discardC# Fire and Forget 任务和丢弃
【发布时间】: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(); 会等待任务然后丢弃结果
  • 请记住“一劳永逸”的意思是“我不在乎这是否成功”。
  • @GabrielLuci 不用担心,我实际上不在乎它是否失败并且任务的结果也不重要。谢谢!

标签: c# asynchronous async-await task c#-7.0


【解决方案1】:

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

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

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

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

【讨论】:

  • 我认为这里有一个误解。任务结束后不会跳过等待;它将控制权交给调用函数,直到等待的任务返回,直到等待之后的语句继续执行。
  • @Denis 什么await? OP 的代码中没有await
猜你喜欢
  • 2014-05-16
  • 2019-07-07
  • 1970-01-01
  • 2013-01-13
  • 2021-10-12
  • 2017-02-19
  • 1970-01-01
  • 2023-02-25
  • 2014-10-20
相关资源
最近更新 更多