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