Tôi biết thường được coi là một ý tưởng tồi khi sử dụng async void
các phương thức fire-and-forget để bắt đầu các tác vụ, bởi vì không có dấu vết của nhiệm vụ đang chờ xử lý và rất khó để xử lý các ngoại lệ có thể nằm trong một phương thức như vậy.
Nói chung, tôi cũng nên tránh các async void
trình xử lý sự kiện? Ví dụ,
private async void Form_Load(object sender, System.EventArgs e)
{
await Task.Delay(2000); // do async work
// ...
}
Tôi có thể viết lại nó như thế này:
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
// ...
}
Đá dưới nước dành cho người xử lý sự kiện không đồng bộ là gì, ngoài khả năng tái thích hợp?