.Net Task 非同步執行(不等待結果返回)
阿新 • • 發佈:2020-08-28
該文章適合有一定非同步程式設計基礎的童鞋
開始之前先看.NET官網的一張圖:
非同步程式設計中最需弄清的是控制流是如何從方法移動到方法的。
沒有理解的話可以去看一下
這幅圖講的是有結果返回的情況,但是在大多數的場景中
比如說:我假設有這樣一個需求:在我獲取資料的同時需要新增大批量的資料
public async Task<List<Model>> GetAndAddModel(List<Model> createModel) {var list =await GetModels(id);//獲取一個列表 var count=await CreateModels(createModel);//大批量新增資料 count--受影響的行數 }
用了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);//大批量新增資料 }
於是成了這個樣子,這裡的關鍵在於:
_=CreateModels(createModel);
這裡我沒有用變數接收,畢竟變數也會耗記憶體
注意:
1、這樣做也就意味著你無法獲取結果
2、只適合失敗也不會產生影響的場景
不對之處歡迎評論 ^_^