gpt4 book ai didi

C# 使用 async 和 await 发布 id block 并合并响应

转载 作者:行者123 更新时间:2023-11-30 15:56:26 25 4
gpt4 key购买 nike

我正在编写一个接受 ID 列表来调用 API 的方法。API 有一个限制,它一次只能接受 1000 个 ID。所以我需要将列表分成 block 并进行单独调用。

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 将多个 IEnumerable 组合回单个 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>>>();

允许您访问每个单独的 TaskResult 属性,并返回合并结果:

apiCallTasks.SelectMany(r2 => r2.Result);

关于C# 使用 async 和 await 发布 id block 并合并响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com