該文章適合有一定異步編程基礎的童鞋
開始之前先看.NET官網的一張圖:
異步編程中最需弄清的是控制流是如何從方法移動到方法的。
沒有理解的話可以去看一下
這幅圖講的是有結果返回的情況,但是在大多數的場景中
比如說:我假設有這樣一個需求:在我獲取數據的同時需要添加大批量的數據
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、只適合失敗也不會產生影響的場景
不對之處歡迎評論 ^_^