外部システムから複数のオブジェクトを取得する必要があります。外部システムは複数の同時要求 (つまりスレッド) をサポートしていますが、外部システムをフラッディングする可能性があります。したがって、複数のオブジェクトを非同期で取得できるようにしたいのですが、同時非同期要求の数を調整できるようにしたいと考えています。つまり、100 個のアイテムを取得する必要がありますが、一度に 25個を超えるアイテムを取得したくありません。25 の各リクエストが完了すると、別の取得をトリガーし、それらがすべて完了したら、リクエストされた順序ですべての結果を返したい (つまり、呼び出し全体が返されるまで結果を返す意味がない) )。この種の推奨パターンはありますか?
このようなものが適切でしょうか (疑似コード、明らかに)?
private List<externalSystemObjects> returnedObjects = new List<externalSystemObjects>;
public List<externalSystemObjects> GetObjects(List<string> ids)
{
int callCount = 0;
int maxCallCount = 25;
WaitHandle[] handles;
foreach(id in itemIds to get)
{
if(callCount < maxCallCount)
{
WaitHandle handle = executeCall(id, callback);
addWaitHandleToWaitArray(handle)
}
else
{
int returnedCallId = WaitHandle.WaitAny(handles);
removeReturnedCallFromWaitHandles(handles);
}
}
WaitHandle.WaitAll(handles);
return returnedObjects;
}
public void callback(object result)
{
returnedObjects.Add(result);
}