有這麼個異步方法數據庫
private static async Task<int> Compute(int s) { return await Task<int>.Run(() => { if (s < 5) return s * 2; else return s * 3; }); }
固然實際過程是從數據庫獲取或者從網絡上獲取什麼內容。網絡
如今我想調用:異步
private static void Main(string[] args) { List<int> s = new List<int> { 1, 2, 3, 4, 5 }; List<int> t = new List<int>(); s.ForEach(ii => { int ret = await Compute(ii); t.Add(ret); }); t.ForEach(ii => Console.WriteLine(ii)); }
發現 vs 劃了一條下劃線async
OK,await 必須 async的,簡單,改一下3d
private static void Main(string[] args) { List<int> s = new List<int> { 1, 2, 3, 4, 5 }; List<int> t = new List<int>(); s.ForEach(async ii => { int ret = await Compute(ii); t.Add(ret); }); t.ForEach(ii => Console.WriteLine(ii)); }
而後,Ctrl+F5運行,報錯了!
code
錯誤在blog
t.ForEach(ii => Console.WriteLine(ii));
緣由在:Foreach 調用了一個 async void 的Action,沒有await(也無法await,而且await 沒返回值的也要設成Task,無法設)
老老實實改爲 foreach(var ii in s)。string