下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一篇文章弄懂C#中的async和await問:async和await不是跟異步方法有關嘛,為啥前面的示例使用了await,全部變成同步了?
問:使用async和await的方法,執(zhí)行過程到底是同步還是異步?
答:同步異步都行,要同步還是異步,全掌握在你的手上。
你使用await去調用一個異步方法,其執(zhí)行過程就是同步。
你獲取異步方法返回的Task,就是異步。
最近筆者收到一些提問,有些讀者,使用async和await去編寫業(yè)務,想著是異步,可以提升性能,實際結果還是同步,性能一點沒有提升。通過下面的示例,你會馬上理解應該怎么用。
首先,在不使用async和await關鍵字的情況下,我們來編寫兩個方法,分別實現同步和異步的功能,兩個方法執(zhí)行的結果是一致的。
///summary
///同步
////summary
///returns/returns
publicstaticintTest()
Taskinttask=newTaskint(()=
return666;
task.Start();
returntask.Result;
///summary
///異步
////summary
///returns/returns
publicstaticTaskintTestAsync()
Taskinttask=newTaskint(()=
return666;
task.Start();
returntask;
能不能將兩個方法合并在一起呢?想同步就同步,想異步就異步,這樣就不需要寫兩個方法了!
是可以的!通過async和await關鍵字,可以輕松實現!
合并后,代碼如下:
///summary
///可異步可同步
////summary
///returns/returns
publicstaticasyncTaskintTestAsync()
Taskinttask=newTaskint(()=
return666;
task.Start();
returnawaittask;
合并后,我們又應該怎么在調用的時候,實現同步和異步呢?
筆者這里給出兩個示例:
//await使得任務同步
publicasyncvoidT1()
//使用await關鍵字,代表等待執(zhí)行完成,同步
inttime=awaitTestAsync();
Console.WriteLine(time);
//直接獲得返回的Task,實現異步
publicvoidT2()
//獲取Task任務對象,后面的邏輯過程可以弄成異步
Taskinttask=TestAsync();
//任務是異步在執(zhí)行,我不理會他
//這里可以處理其它事情,處理完畢后,再獲取執(zhí)行結果
//這就是異步
Console.WriteLine(task.Result);
至此,理解為什么使用了async和await,執(zhí)行時還是同步了吧?
Task封裝異步任務
前面,我們都是使用了newTask()來創(chuàng)建任務,而且微軟官網大多使用Task.Run()來編寫async和await的示例。
因此,我們可以修改前面的異步任務,改成:
///summary
///可異步可同步
////summary
///returns/returns
publicstaticasyncTaskintTestAsync()
returnawaitTask.Runint(()=
return666;
關于跳到await變異步
在百度學習異步的時候,往往會有作者說,進入異步方法后,同步執(zhí)行代碼,碰到await后就是異步執(zhí)行。
當然還有多種說法。
我們已經學習了這么多的任務(Task)知識,這一點十分容易解釋。
因為使用了async和await關鍵字,代碼最深處,必定會出現Task這個東西,Task這個東西本來就是異步。碰到await出現異步,不是因為await的作用,而是因為最底層有個Task。
為什么出現一層層的await
這是相對于提供服務者來說。因為我要提供接口給你使用,因此底層出現async、await后,我會繼續(xù)保留方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同執(zhí)行信譽承諾函6篇范文
- 2025年安徽省肥西事業(yè)單位考試及答案
- 協(xié)議可靠性與有效性承諾函范文9篇
- 2025年鄞州小學語文筆試及答案
- 2025年noi競賽歷年真題筆試及答案
- 教育領域成就助力承諾函范文5篇
- 2025年金華護理事業(yè)編考試題及答案
- 2025年廣西事業(yè)編考試B類歷年試題及答案
- 2025年浙江杭州新華集團筆試及答案
- 2025年東莞市麻涌事業(yè)編考試及答案
- 《開學第一課:龍馬精神·夢想起航》課件 2025-2026學年統(tǒng)編版語文七年級下冊
- 2026年洪湖市事業(yè)單位人才引進100人參考考試題庫及答案解析
- 2026年中好建造(安徽)科技有限公司第一次社會招聘42人筆試參考題庫及答案解析
- 北京市海淀區(qū)2025一2026學年度第一學期期末統(tǒng)一檢測歷史(含答案)
- 2026年科研儀器預約使用平臺服務協(xié)議
- 新《增值稅法實施條例》逐條解讀課件
- 2026年廣西職教高考5套語文模擬試卷試題及逐題答案解釋和5套試題的綜合分析報告
- 領導干部任職前廉政法規(guī)知識測試題及答案(2025年)
- 內分泌急癥識別與應急護理預案
- 急危重癥患者氣道管理新進展
- 心包填塞的表現與護理
評論
0/150
提交評論