Visual Studio emits a warning for this code ('because this call is not awaited, execution of the current method continues before the call is completed').
static void Main(string[] args)
{
FireAndForget(); // <-- Warning CS4014
// Do something else.
}
static async Task FireAndForget()
{
// Do something (cannot throw).
}
My understanding is that it is OK not to wait for the task in this particular case because FireAndForget will never throw an exception.
Instead of disabling the warning with a pragma, I was considering changing the return type of FireAndForget from Task to void. That effectively silences the compiler.
static async void FireAndForget() // <-- Task changed to void
{
// Do something (cannot throw).
}
However, according to Stephen Cleary, 'async void' methods should be avoided so I am not quite sure what to do.
Is it OK to have a 'async void' method if the method is not designed to be awaitable in the first place and if no exception will be thrown?
FireAndForget
actually do? – Yuval Itzchakov