1 private void button1_Click(object sender, EventArgs e) 2 { 3 TestReturnsVoid();//會在UI Thread拋出異常,導致程序崩潰 4 } 5 6 private void button2_Click(object sender, EventArgs e) 7 { 8 TestReturnsTask();//會在另外一個線程拋出異常,類似TheadPool的效果 9 } 10 11 private async void TestReturnsVoid() 12 { 13 await Test(); 14 } 15 16 private async Task TestReturnsTask() 17 { 18 await Test(); 19 } 20 21 private async Task Test() 22 { 23 throw new NotImplementedException(); 24 }
結論
1. async void 僅僅推薦用在UI event handler
2.總是處理事件 : TaskScheduler.UnobservedTaskException