Devo evitar manipuladores de eventos 'async void'?
Eu sei que geralmente é considerado uma má idéia usar fogo e esquecerasync void
métodos para iniciar tarefas, porque não há controle da tarefa pendente e é complicado lidar com exceções que podem ser lançadas dentro de tal método.
Devo geralmente evitarasync void
manipuladores de eventos, também? Por exemplo,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Eu posso reescrever assim:
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
// ...
}
Quais são as rochas submersas para manipuladores de eventos assíncronos, além da possível reentrada?