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