So che è generalmente considerata una cattiva idea usare il fuoco e dimentica async void
metodi per avviare le attività, perché non c'è traccia dell'attività in sospeso ed è difficile gestire le eccezioni che potrebbero essere lanciate all'interno di un tale metodo.
In genere dovrei evitare anche i async void
gestori di eventi? Per esempio,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Posso riscriverlo in questo modo:
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
// ...
}
Quali sono le rocce sottomarine per i gestori di eventi asincroni, oltre al possibile rientro?