To nie jest duplikat „Jak bezpiecznie wywołać metodę asynchroniczną w języku C # bez oczekiwania” .
Jak ładnie ukryć poniższe ostrzeżenie?
ostrzeżenie CS4014: Ponieważ to wywołanie nie jest oczekiwane, wykonywanie bieżącej metody jest kontynuowane przed zakończeniem wywołania. Rozważ zastosowanie operatora „await” do wyniku wywołania.
Prosty przykład:
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);
}
Co próbowałem i nie podobało się:
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
// ...
}
Zaktualizowano , ponieważ pierwotnie zaakceptowana odpowiedź została edytowana, zmieniłem zaakceptowaną odpowiedź na tę, która używa odrzuconych C # 7.0 , ponieważ uważam, że nie ContinueWith
jest tu odpowiednia. Ilekroć muszę rejestrować wyjątki dla operacji „wystrzel i zapomnij”, używam bardziej złożonego podejścia zaproponowanego przez Stephena Cleary'ego .
async void
metody pomocniczej.
#pragma
to nie jest miłe?