为了账号安全,请及时绑定邮箱和手机立即绑定

使用async / await执行多个任务

使用async / await执行多个任务

开满天机 2019-08-06 13:17:35
使用async / await执行多个任务我正在使用完全异步的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,我希望这会立即发出5个HTTP请求,并在每个请求完成时写入控制台。
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

由于您调用的API是异步的,因此该Parallel.ForEach版本没有多大意义。你不应该.WaitWaitAll版本中使用,因为这将失去并行性如果调用者是异步的另一种选择是Task.WhenAll在执行后使用SelectToArray生成任务数组。第二种选择是使用Rx 2.0


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 2530 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信