Program Visual Studio wysyła ostrzeżenie dotyczące tego kodu ("ponieważ wywołanie to nie jest oczekiwane, wykonanie bieżącej metody jest kontynuowane przed zakończeniem połączenia").Czy można zadeklarować metodę asynchroniczną jako zwracającą pustkę, aby uciszyć ostrzeżenie CS4014?
static void Main(string[] args)
{
FireAndForget(); // <-- Warning CS4014
// Do something else.
}
static async Task FireAndForget()
{
// Do something (cannot throw).
}
moim rozumieniu jest to, że jest OK, aby nie czekać do tego zadania w tym konkretnym przypadku, ponieważ fire-and-forget nigdy rzuci wyjątek.
Zamiast wyłączać ostrzeżenie z pragmą, rozważałem zmianę typu powrotu FireAndForget z zadania na nieważne. To skutecznie wycisza kompilator.
static async void FireAndForget() // <-- Task changed to void
{
// Do something (cannot throw).
}
Jednak według Stephen Cleary „asynchroniczny” void metod należy unikać, więc nie jestem pewien, co zrobić.
Czy można mieć metodę "async void", jeśli metoda nie została zaprojektowana jako pierwsza i jeśli nie zostanie zgłoszony żaden wyjątek?
* Metoda nie została zaprojektowana jako pierwsza na co dzień. * Co to znaczy? Co właściwie robi 'FireAndForget'? –
Dlaczego do cholery zostało to odrzucone + głosowałem za zamknięciem? – ken2k
@ ken2k Nie głosowałem, aby zamknąć, ale widzę, gdzie byłoby to postrzegane jako pytanie oparte na opiniach bez obiektywnie poprawnej odpowiedzi. Być może "Czy to jest OK" można przeformułować na "Jakie są zalety i wady". – pseudocoder