Sollte ich "async void" -Ereignishandler vermeiden?

Ich weiß, dass es im Allgemeinen eine schlechte Idee ist, Fire-and-Forget zu verwendenasync void Methoden zum Starten von Tasks, da es keinen Überblick über die ausstehende Task gibt und es schwierig ist, mit Ausnahmen umzugehen, die möglicherweise in einer solchen Methode ausgelöst werden.

Sollte ich generell meidenasync void Eventhandler auch? Zum Beispiel,

private async void Form_Load(object sender, System.EventArgs e)
{
        await Task.Delay(2000); // do async work
        // ...
} 

Ich kann es so umschreiben:

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
        // ...
} 

Was sind die Unterwasserfelsen für asynchrone Event-Handler, abgesehen von einem möglichen Wiedereintritt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage