使用async / await執(zhí)行多個任務(wù)我正在使用完全異步的API客戶端,也就是說,每個操作都返回Task或者Task<T>,例如:static async Task DoSomething(int siteId, int postId, IBlogClient client){
await client.DeletePost(siteId, postId); // call API client
Console.WriteLine("Deleted post {0}.", siteId);}使用C#5 async / await運算符,啟動多個任務(wù)并等待它們?nèi)客瓿傻恼_/最有效方法是什么:int[] ids = new[] { 1, 2, 3, 4, 5 };Parallel.ForEach(ids, i => DoSomething(1, i, blogClient).Wait());要么:int[] ids = new[] { 1, 2, 3, 4, 5 };Task.WaitAll(ids.Select(i => DoSomething(1, i, blogClient)).ToArray());由于API客戶端在內(nèi)部使用HttpClient,我希望這會立即發(fā)出5個HTTP請求,并在每個請求完成時寫入控制臺。
3 回答

翻閱古今
TA貢獻1780條經(jīng)驗 獲得超5個贊
由于您調(diào)用的API是異步的,因此該Parallel.ForEach
版本沒有多大意義。你不應(yīng)該.Wait
在WaitAll
版本中使用,因為這將失去并行性如果調(diào)用者是異步的另一種選擇是Task.WhenAll
在執(zhí)行后使用Select
并ToArray
生成任務(wù)數(shù)組。第二種選擇是使用Rx 2.0
- 3 回答
- 0 關(guān)注
- 2579 瀏覽
添加回答
舉報
0/150
提交
取消