Visual Studio выдает предупреждение для этого кода ( "потому что этот вызов не ожидается, выполнение текущего метода продолжается до завершения вызова" ).
static void Main(string[] args)
{
FireAndForget(); // <-- Warning CS4014
// Do something else.
}
static async Task FireAndForget()
{
// Do something (cannot throw).
}
Я понимаю, что не стоит ждать задачи в этом конкретном случае, потому что FireAndForget никогда не будет генерировать исключение.
Вместо того, чтобы отключать предупреждение с помощью прагмы, я рассматривал возможность изменения возвращаемого типа FireAndForget от Task до void. Это эффективно отключает компилятор.
static async void FireAndForget() // <-- Task changed to void
{
// Do something (cannot throw).
}
Однако, согласно Stephen Cleary, следует избегать методов async void, поэтому я не совсем уверен, что делать.
Можно ли использовать метод "async void", если метод не предназначен для того, чтобы быть в первую очередь ожидаемым, и если исключение не будет выбрано?