一篇文章弄懂C#中的async和await_第1頁
一篇文章弄懂C#中的async和await_第2頁
一篇文章弄懂C#中的async和await_第3頁
一篇文章弄懂C#中的async和await_第4頁
一篇文章弄懂C#中的async和await_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一篇文章弄懂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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論