ฉันรู้ว่าโดยทั่วไปถือว่าเป็นความคิดที่ไม่ดีที่จะใช้วิธีการจุดไฟและลืมasync voidเพื่อเริ่มงานเนื่องจากไม่มีงานที่รอดำเนินการอยู่และเป็นเรื่องยากที่จะจัดการข้อยกเว้นที่อาจเกิดขึ้นในวิธีการดังกล่าว
โดยทั่วไปฉันควรหลีกเลี่ยง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
        // ...
} หินใต้น้ำสำหรับตัวจัดการเหตุการณ์ async มีอะไรบ้างนอกเหนือจาก re-entrancy ที่เป็นไปได้?