async void
작업을 시작 하기 위해 fire-and-forget 메서드 를 사용하는 것은 일반적으로 나쁜 생각으로 간주된다는 것을 알고 있습니다 . 대기중인 작업에 대한 추적이없고 그러한 메서드 내부에서 발생할 수있는 예외를 처리하는 것이 까다롭기 때문입니다.
일반적으로 async void
이벤트 핸들러도 피해야 합니까? 예를 들면
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
다음과 같이 다시 작성할 수 있습니다.
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
// ...
}
재진입 가능성 외에 비동기 이벤트 핸들러의 수중 암석은 무엇입니까?