使用async / await執(zhí)行多個任務我正在使用完全異步的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運算符,啟動多個任務并等待它們全部完成的正確/最有效方法是什么: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客戶端在內部使用HttpClient,我希望這會立即發(fā)出5個HTTP請求,并在每個請求完成時寫入控制臺。
3 回答

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