关于C#异步编程的建议
生活随笔
收集整理的這篇文章主要介紹了
关于C#异步编程的建议
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于任務的異步編程模型 (TAP) 提供了異步代碼的抽象化。你只需像往常一樣將代碼編寫為一連串語句即可。就如每條語句在下一句開始之前完成一樣,你可以流暢地閱讀代碼。編譯器將執行許多轉換,因為其中一些語句可能會開始運行并返回表示正在進行的工作的 Task。
這就是此語法的目標:支持讀起來像一連串語句的代碼,但會根據外部資源分配和任務完成時間以更復雜的順序執行。這與人們為包含異步任務的流程給予指令的方式類似。在本文中,你將通過做早餐的指令示例來查看如何使用 async 和 await 關鍵字更輕松地推斷包含一系列異步指令的代碼。
其中在使用異步方法中最好不要使用void當做返回值,無返回值也應使用Task作為返回值,因為使用void作為返回值具有以下缺點
無法得知異步函數的狀態機在什么時候執行完畢
如果異步函數中出現異常,則會導致進程崩潰
?異步函數不應該返回void
static??void?Main(string[]?args) {try{//??????如果Run方法無異常正常執行,那么程序無法得知其狀態機什么時候執行完畢Run();}catch?(Exception?ex){Console.WriteLine(ex.Message);}Console.Read(); } static?async?void?Run() {//??????由于方法返回的為void,所以在調用此方法時無法捕捉異常,使得進程崩潰throw?new?Exception("異常了");await?Task.Run(()?=>?{?});}??應該將異步函數返回Task
static??async?Task?Main(string[]?args) {try{//?????因為在此進行await,所以主程序知道什么時候狀態機執行完成await?RunAsync();Console.Read();}catch?(Exception?ex){Console.WriteLine(ex.Message);} } static?async?Task?RunAsync() {//??????因為此異步方法返回的為Task,所以此異常可以被捕捉throw?new?Exception("異常了");await?Task.Run(()?=>?{?});}注:事件是一個例外,異步事件也是返回void
總結
以上是生活随笔為你收集整理的关于C#异步编程的建议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《.NET内存管理宝典》在京东上架销售啦
- 下一篇: C# action,delegate,f