Это не дубликат «Как безопасно вызвать асинхронный метод в C # без ожидания» .
Как мне приятно подавить следующее предупреждение?
предупреждение CS4014: поскольку этот вызов не ожидается, выполнение текущего метода продолжается до завершения вызова. Попробуйте применить оператор 'await' к результату вызова.
Простой пример:
static async Task WorkAsync()
{
await Task.Delay(1000);
Console.WriteLine("Done!");
}
static async Task StartWorkAsync()
{
WorkAsync(); // I want fire-and-forget
// more unrelated async/await stuff here, e.g.:
// ...
await Task.Delay(2000);
}
Что я пробовал и не понравилось
static async Task StartWorkAsync()
{
#pragma warning disable 4014
WorkAsync(); // I want fire-and-forget here
#pragma warning restore 4014
// ...
}
static async Task StartWorkAsync()
{
var ignoreMe = WorkAsync(); // I want fire-and-forget here
// ...
}
Обновленный , так как исходный принятый ответ был отредактирован, я изменил принятый ответ на тот, который использует C # 7.0 , поскольку я не думаю, что ContinueWith
здесь уместно. Всякий раз, когда мне нужно регистрировать исключения для операций запуска и забывания, я использую более сложный подход, предложенный Стивеном Клири здесь .
async void
вспомогательного метода.
#pragma
не приятно?