C#发布ID块并使用async和await合并响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#发布ID块并使用async和await合并响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1219字,纯文字阅读大概需要2分钟。
内容图文
![C#发布ID块并使用async和await合并响应](/upload/InfoBanner/zyjiaocheng/685/b024dabd95164418be9bd0086d1699c6.jpg)
我正在编写一个接受ID列表以调用API的方法.
该API有一个限制,一次只能接受1000个ID.因此,我需要将列表拆分为多个块并进行单独的调用.
public async Task<List<JObject>> readData(List<int> IDs){
const int APIMaxLimit = 1000;
List<List<int>> chunks = new List<List<int>>();
while (IDs.Any())
{
chunks.Add(IDs.Take(APIMaxLimit).ToList());
IDs= IDs.Skip(APIMaxLimit).ToList();
}
var apiCallTasks = new List<Task>();
foreach (var chunk in chunks)
{
//some logic
apiCallTasks.Add(ReadDatacentersFromResponse(response));
}
await Task.WhenAll(apiCallTasks);
//What do I return?
}
private static async Task<List<JObject>> ReadDatacentersFromResponse(HttpResponseMessage response);
我写了上面的代码,但是我不知道如何返回组合的值.另外,有没有一种方法可以编写更优雅的代码而不使用for循环?
解决方法:
从一般的角度来看,可以使用.SelectMany将多个IEnumerables组合回一个IEnumerable中.
var data = new List<List<int>>
{
new List<int>{1,2,3},
new List<int>{4,5,6},
new List<int>{7,8,9}
};
var result = data.SelectMany(x => x);
返回:{1、2、3、4、5、6、7、8、9}
在您的特定示例中,您可能需要更改
var apiCallTasks = new List<Task>();
至
var apiCallTasks = new List<Task<List<JObject>>>();
允许您访问每个任务的Result属性,并使用以下命令返回合并的结果:
apiCallTasks.SelectMany(r2 => r2.Result);
内容总结
以上是互联网集市为您收集整理的C#发布ID块并使用async和await合并响应全部内容,希望文章能够帮你解决C#发布ID块并使用async和await合并响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。