.Net Task 異步執行不等待結果返回


該文章適合有一定異步編程基礎的童鞋

開始之前先看.NET官網的一張圖:

異步編程中最需弄清的是控制流是如何從方法移動到方法的。

沒有理解的話可以去看一下

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model

這幅圖講的是有結果返回的情況,但是在大多數的場景中

比如說:我假設有這樣一個需求:在我獲取數據的同時需要添加大批量的數據

public async Task<List<Model>> GetAndAddModel(List<Model> createModel)
{

   var list =await GetModels(id);//獲取一個列表
   var count=await CreateModels(createModel);//大批量添加數據 count--受影響的行數
   return list;
}

用了await 雖然進行的是異步I/O操作,但是也意味的必須等待結果返回

這里假設我獲取花了50ms,創建需要5s,那么“GetAndAddModel”這個方法需要執行5s+50ms的時間

如果讓一個用戶等待5s,結果可想而知

我們更希望將方法“CreateModels”它自己去執行下面的操作,而不用等待它的結果,畢竟行數對我的意義並不大

public async Task<List<Model>> GetAndAddModel(List<Model> createModel)
{

   var list =await GetModels(id);//獲取一個列表
   _=CreateModels(createModel);//大批量添加數據
return list; }

於是成了這個樣子,這里的關鍵在於:

在執行添加的時候並不用等待結果返回,而是繼續執行方法

也就是我執行這個方法只需要50ms

_=CreateModels(createModel);

這里我沒有用變量接收,畢竟變量也會耗內存

注意:

1、這樣做也就意味着你無法獲取結果

2、只適合失敗也不會產生影響的場景

 

 不對之處歡迎評論 ^_^

 


免責聲明!

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



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