W jakich scenariuszach chcielibyśmy skorzystać
public async Task AsyncMethod(int num)
zamiast
public async void AsyncMethod(int num)
Jedyny scenariusz, o którym mogę pomyśleć, to jeśli potrzebujesz zadania, aby móc śledzić jego postępy.
Ponadto w poniższej metodzie asynchronizacja i oczekiwanie na słowa kluczowe są niepotrzebne?
public static async void AsyncMethod2(int num)
{
await Task.Factory.StartNew(() => Thread.Sleep(num));
}
Thread.Sleep
w swoich zadaniach, powinieneś await Task.Delay(num)
zamiast tego
Task.Delay
nie jest Task.AsyncDelay
jak wszystkie metody na zadania są asynchroniczny
async void
zamiast async Task
. Metoda uległa awarii, ponieważ korzystała z obiektu kontekstowego Entity Framework zadeklarowanego jako element kontrolera, zanim została zakończona metoda. Środowisko rozproszyło kontroler, zanim zakończyła się jego metoda wykonywania. Zmieniłem metodę na asynchronizującą Zadanie i zadziałało.
Foo()
byłoby staćFooAsync()
.