Ich habe eine async
Methode, die keine Daten zurückgibt:
public async Task MyAsyncMethod()
{
// do some stuff async, don't return any data
}
Ich rufe dies von einer anderen Methode auf, die einige Daten zurückgibt:
public string GetStringData()
{
MyAsyncMethod(); // this generates a warning and swallows exceptions
return "hello world";
}
Wenn Sie MyAsyncMethod()
ohne Wartezeit anrufen, wird in Visual Studio die Warnung " Da dieser Anruf nicht erwartet wird, wird die aktuelle Methode weiter ausgeführt, bevor der Anruf abgeschlossen ist " angezeigt. Auf der Seite für diese Warnung heißt es:
Sie sollten die Warnung nur unterdrücken, wenn Sie sicher sind, dass Sie nicht auf den Abschluss des asynchronen Aufrufs warten möchten und die aufgerufene Methode keine Ausnahmen auslöst .
Ich bin sicher, ich möchte nicht warten, bis der Anruf abgeschlossen ist. Ich brauche oder habe keine Zeit dafür. Der Anruf kann jedoch Ausnahmen auslösen.
Ich bin ein paar Mal auf dieses Problem gestoßen und bin mir sicher, dass es ein häufiges Problem ist, das eine gemeinsame Lösung haben muss.
Wie rufe ich eine asynchrone Methode sicher auf, ohne auf das Ergebnis zu warten?
Aktualisieren:
Für Leute, die vorschlagen, dass ich nur auf das Ergebnis warte, ist dies Code, der auf eine Webanforderung in unserem Webdienst (ASP.NET-Web-API) reagiert. Das Warten in einem UI-Kontext hält den UI-Thread frei, aber das Warten in einem Webanforderungsaufruf wartet, bis die Aufgabe beendet ist, bevor auf die Anfrage geantwortet wird, wodurch die Antwortzeiten ohne Grund verlängert werden.
MyAsyncMethod().Wait()