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?

questionAnswers(4)

yourAnswerToTheQuestion