await Task.Yield(); 超簡單理解!


await Task.Yield();//1
var data = LoadData();//2
await Task.Run(() => Do(data));//3

上面的代碼類似於:

Task.Run(() => { }).ContinueWith(t => Do(LoadData()));

意思就是: loadData 如果耗時較長那么上述代碼會產生阻塞,為了LoadData不阻塞 特意加了 await Task.Yield(); 

意思就是: 先排個隊。

再來看注釋:Creates an awaitable task that asynchronously yields back to the current context when awaited.

創建一個異步的空任務,這個任務用於等待。

意思就是: 先創建一個空任務,然后用於等待,而等待后面的代碼會編譯成 后續任務 ,這樣就把本來應該是主任務干的活放到了一個空任務 后續任務里。

這樣主任務嘚兒...就完事了。

 

 

 
         
         
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM