日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

关于C#异步编程的建议

發布時間:2023/12/4 C# 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于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#异步编程的建议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。