0

我有一个如下所述的服务方法

GetDetails(List<int> ids)

问题是,如果 id 的数量(计数)小于 50,则上述服务方法可以正常工作......超过 50 个 id 的任何东西都会引发错误......这就是服务的构建方式,我没有任何控制权更改此服务方法...

现在我有一种情况,我必须为 1000 个 Id 调用此服务方法,这意味着上述服务方法将不起作用,除非我猜测要做某种多线程/并行的东西......我的问题是......有没有办法使这项工作,同时不妥协的性能很多...任何帮助将不胜感激...

更新 错误是一个已处理的异常,服务说“无法处理请求”......这个服务是由一个远程团队工作的,我无法控制它......

4

3 回答 3

3

TPL + Linq。这将使用最多 50 个并行项目的列表调用服务。

Parallel.ForEach(
    ids.Select((Item, Index) => new { Item, Index })
        .GroupBy(x => x.Index / 50)
        .Select(g => g.Select(x => x.Item).ToList()),
    list =>
    {
        Console.WriteLine(String.Join(",", list));
        //GetDetails(list)
    }
);
于 2012-10-04T13:51:47.010 回答
0

这意味着上述服务方法将不起作用,除非我猜测要做某种多线程/并行的东西......

为什么不使用.Take()and.Skip()遍历您的 ID 列表,一次使用 50 个 ID 拨打电话?

于 2012-10-04T13:47:46.913 回答
0

可能可行的最简单的事情是将您对服务的调用批量化。

int index = 0;
while (index < ids.Count + 50)
{
    var batchedIds = ids.Skip(index).Take(50);
    GetDetails(batchedIds);
    index += 50;
}
于 2012-10-04T13:48:42.253 回答