Mam async
metodę, która nie zwraca danych:
public async Task MyAsyncMethod()
{
// do some stuff async, don't return any data
}
Wywołuję to z innej metody, która zwraca niektóre dane:
public string GetStringData()
{
MyAsyncMethod(); // this generates a warning and swallows exceptions
return "hello world";
}
Wywołanie MyAsyncMethod()
bez oczekiwania powoduje pojawienie się ostrzeżenia „ Ponieważ to połączenie nie jest oczekiwane, bieżąca metoda działa jeszcze przed zakończeniem połączenia ” w Visual Studio. Na stronie tego ostrzeżenia znajduje się:
Powinieneś rozważyć wyłączenie ostrzeżenia tylko wtedy, gdy masz pewność, że nie chcesz czekać na zakończenie asynchronicznego wywołania i że wywoływana metoda nie spowoduje żadnych wyjątków .
Jestem pewien, że nie chcę czekać na zakończenie połączenia; Nie muszę ani nie mam czasu. Ale połączenie może powodować wyjątki.
Kilka razy natknąłem się na ten problem i jestem pewien, że jest to powszechny problem, który musi mieć wspólne rozwiązanie.
Jak bezpiecznie wywołać metodę asynchroniczną bez oczekiwania na wynik?
Aktualizacja:
Dla osób sugerujących, że właśnie czekam na wynik, jest to kod, który odpowiada na żądanie sieciowe w naszym serwisie internetowym (ASP.NET Web API). Oczekiwanie w kontekście interfejsu użytkownika utrzymuje wątek interfejsu użytkownika wolny, ale oczekiwanie w wywołaniu żądania WWW będzie czekać na zakończenie zadania przed odpowiedzią na żądanie, zwiększając w ten sposób czas odpowiedzi bez powodu.
MyAsyncMethod().Wait()