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