Dies ist kein Duplikat von "So rufen Sie eine asynchrone Methode sicher in C # auf, ohne zu warten" .
Wie unterdrücke ich die folgende Warnung?
Warnung CS4014: Da dieser Aufruf nicht erwartet wird, wird die Ausführung der aktuellen Methode fortgesetzt, bevor der Aufruf abgeschlossen ist. Wenden Sie den Operator "Warten" auf das Ergebnis des Anrufs an.
Ein einfaches Beispiel:
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);
}
Was ich versucht habe und nicht mochte:
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
// ...
}
Aktualisiert , da die ursprünglich akzeptierte Antwort bearbeitet wurde, habe ich die akzeptierte Antwort in die Antwort mit C # 7.0-Rückwürfen geändert , da ich dies hier nicht für ContinueWith
angemessen halte . Wann immer ich Ausnahmen für Feuer-und-Vergessen-Operationen protokollieren muss, verwende ich einen ausgefeilteren Ansatz, den Stephen Cleary hier vorgeschlagen hat .
async void
Hilfsmethode.
#pragma
ist nicht schön?