为什么异步方法必须等待

时间:2017-09-07 06:10:30

标签: c# task-parallel-library

我们使用async关键字使方法异步。如果该方法不使用任何await关键字,则编译器会生成该方法将同步运行的警告。但我不明白为什么会这样。 让我们假设方法f()调用方法g()并且f不需要等待g完成。这意味着f需要异步调用g。但即使g不需要使用任何等待,也可能出现这样的要求。这将如何实现?

2 个答案:

答案 0 :(得分:0)

  

让我们假设方法f()调用方法g()并且f不需要等待g完成。

你确定吗? “火与忘”字面意思是忘记。也就是说,如果g永远不会完成,你真的不在乎,并且你可以通过静默吞下g的所有例外。这就是“火与忘记”实际意味着什么,并且> 90%的时间人们真正想要的东西。

  

这意味着f需要异步调用g。

它的方式是通过await

async Task f() => await g();

答案 1 :(得分:-1)

出于您的目的,您可以使用Task.Run或Task.Factory.Start来触发并忘记您的方法 g

void f() {
    ...
    Task.Run(() => g())
    ...
}

当调用 async 方法时,它不会应用 await 运算符,它将作为异步任务启动。由于没有等待操作符在此方法中应用,程序将继续,而无需等待任务完成。 (见Compiler Warning (level 1) CS4014