0

以下の Service メソッドがあります

GetDetails(List<int> ids)

問題は、ID の数 (カウント) が 50 未満の場合、上記のサービス メソッドが正常に機能することです...50 を超える ID はエラーをスローします...これがサービスの構築方法であり、私には制御できませんこのサービス方法を変更...

現在、1000 ID に対してこのサービス メソッドを呼び出さなければならない状況があります。これは、ある種のマルチスレッド/並列処理を行うことを推測しない限り、上記のサービス メソッドが機能しないことを意味します...私の質問は...この作業を行うと同時に、パフォーマンスに多くの妥協をしない方法はありますか...どんな助けも深く感謝します...

更新 エラーは処理された例外であり、サービスは「リクエストを処理できません」と言っています...このサービスはリモートのチームによって行われ、私はそれを制御できません...

4

3 に答える 3

3

TPL + リンク。これにより、最大 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()とを使用し.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 に答える