4
ฉันควรหลีกเลี่ยงตัวจัดการเหตุการณ์ 'async void' หรือไม่
ฉันรู้ว่าโดยทั่วไปถือว่าเป็นความคิดที่ไม่ดีที่จะใช้วิธีการจุดไฟและลืม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 …