1. 程式人生 > 實用技巧 >.Net Task 非同步執行(不等待結果返回)

.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--受影響的行數 }

用了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、只適合失敗也不會產生影響的場景

不對之處歡迎評論 ^_^