Unter welchen Szenarien möchte man verwenden
public async Task AsyncMethod(int num)
anstatt
public async void AsyncMethod(int num)
Das einzige Szenario, an das ich denken kann, ist, wenn Sie die Aufgabe benötigen, um ihren Fortschritt verfolgen zu können.
Sind bei der folgenden Methode außerdem die Schlüsselwörter asynchron und warten unnötig?
public static async void AsyncMethod2(int num)
{
await Task.Factory.StartNew(() => Thread.Sleep(num));
}
Thread.Sleep
für Ihre Aufgaben verwenden sollten, die Sie await Task.Delay(num)
stattdessen verwenden sollten
Task.Delay
ist nicht Task.AsyncDelay
, dass alle Methoden auf Aufgabe Async sind
async void
stattdessen als deklariert wurde async Task
. Die Methode stürzte ab, weil ein als Mitglied des Controllers deklariertes Entity Framework-Kontextobjekt verwendet wurde, bevor die Ausführung der Methode abgeschlossen war. Das Framework hat den Controller entsorgt, bevor die Ausführung seiner Methode abgeschlossen ist. Ich habe die Methode in async Task geändert und es hat funktioniert.
Foo()
werden solltenFooAsync()
.