Wiem, że generalnie uważane jest za zły pomysł, aby async void
uruchamiać zadania przy użyciu metod odpal i zapomnij , ponieważ nie ma ścieżki oczekującego zadania i trudno jest obsłużyć wyjątki, które mogą zostać wrzucone do takiej metody.
Czy powinienem również unikać async void
obsługi zdarzeń? Na przykład,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Mogę to przepisać w ten sposób:
Task onFormLoadTask = null; // track the task, can implement cancellation
private void Form_Load(object sender, System.EventArgs e)
{
this.onFormLoadTask = OnFormLoadTaskAsync(sender, e);
}
private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Jakie są podwodne skały dla obsługi zdarzeń asynchronicznych, oprócz możliwego ponownego wejścia?