Sé que generalmente se considera una mala idea usar async void
métodos de disparar y olvidar para iniciar tareas, porque no hay un seguimiento de la tarea pendiente y es complicado manejar las excepciones que pueden aparecer dentro de dicho método.
¿Debo evitar generalmente los async void
controladores de eventos también? Por ejemplo,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Puedo reescribirlo así:
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
// ...
}
¿Cuáles son las rocas submarinas para los controladores de eventos asíncronos, además de la posible reentrada?