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