使用丢弃关键字丢弃任务会导致任何副作用吗?

Tim*_*meh 2 c# c#-7.0

从 C# 7 开始,我们可以使用丢弃_来丢弃未使用的变量。我使用它的一件事是在即发即忘的任务中。

考虑这个方法:

public Task Example()
{
    // Do some fire-and-forget stuff.
}
Run Code Online (Sandbox Code Playgroud)

您可以通过简单地不等待任务来消除此任务:Example(),但是这仍然会给您一个警告。使用丢弃关键字,我们现在可以使用: _ = Example(),它消除了这个警告。我想知道这是否有任何我应该注意的令人讨厌的副作用?(除了 MSDN 声明的内容:“这具有抑制操作即将完成时抛出的异常的效果。”)

Swe*_*per 5

丢弃语法只是一种语法糖,用于抑制“此表达式的返回值未使用”的警告。这两行编译为相同的 IL:

_ = Example();
Example();
Run Code Online (Sandbox Code Playgroud)

它们都成为相同的call指令。

因此,如果Example()对您有用,那么_ = Example().