Async下处理多个异常
生活随笔
收集整理的這篇文章主要介紹了
Async下处理多个异常
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
???? Task Parallel Library (TPL) 中,當(dāng)你使用async/await?語(yǔ)法關(guān)鍵字時(shí),你可能遇到以下異常處理的情況: Catch 塊只會(huì)處理第一個(gè)異常而忽略其它的異常。來(lái)看下面代碼塊:
1: try 2: { 3: Task t = Task.Factory.StartNew(() => 4: { 5: Task.Factory.StartNew(() => 6: { throw new NullReferenceException(); }, 7: TaskCreationOptions.AttachedToParent); 8: Task.Factory.StartNew(() => 9: { throw new ArgumentException(); }, 10: TaskCreationOptions.AttachedToParent); 11: }); 12: await t.ContinueWith(tsk => { if (tsk.Exception != null) throw tsk.Exception; }); 13: } 14: catch (AggregateException ex) 15: { 16: foreach (var exc in ex.Flatten().InnerExceptions) 17: { 18: Console.WriteLine(exc.GetType().Name); 19: } 20: }
?
注意上面12行代碼,使用了CoutinueWith方法,為了讓代碼更加簡(jiǎn)潔了,我們可以寫一個(gè)擴(kuò)展方法:
然后代碼就是變成這樣了:
有看到上面代碼11行的變化為我們擴(kuò)展方法。就這么簡(jiǎn)單,以上代碼在Vs2012下 .net framework 4.5 version 下測(cè)試通過(guò),希望對(duì)你開(kāi)發(fā)有幫助。
您可能感興趣的文章:
Asp.net MVC 4 異步方法
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。
該文章也同時(shí)發(fā)布在我的獨(dú)立博客中-Petter Liu Blog。
總結(jié)
以上是生活随笔為你收集整理的Async下处理多个异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ParallaxView
- 下一篇: 【selenium】 selenium