0
1回の呼び出しで返されるオブジェクト数が100個に制限されているため、Webサービスを複数回呼び出す必要があります。ループ内で複数のタスクを待つ
私はWebサービスコールごとにタスクを作成していますが、タスクがアイテムの制限よりも少なくなったときに停止します。つまり、取得するアイテムはもうありません。
public static async Task<List<Space>> GetSpacesByTypeParallel(SpaceType type, string ticket, int degreeOfParallelism)
{
int offset = 0;
int batchSize = degreeOfParallelism * RETURN_LIMIT;
List<Space> spaces = new List<Space>();
Task<List<Space>>[] tasks = new Task<List<Space>>[degreeOfParallelism];
bool shouldContinue = true;
while(shouldContinue)
{
for(int i = 0; i < degreeOfParallelism; i++)
{
tasks[i] = Task.Run<List<Space>>(() => GetSpacesAtOffset(offset + (i * RETURN_LIMIT), RETURN_LIMIT, ticket, null, type.ToString())); //GetSpacesAtOffset is a synchronous method
}
List<Space>[] result = await Task.WhenAll(tasks);
foreach(List<Space> item in result)
{
spaces.AddRange(item);
if(item.Count < RETURN_LIMIT)
{
shouldContinue = false;
}
}
offset += batchSize;
}
return spaces;
}
私はテスト目的のために同期的にこれを実行している:
var spaces = Space.GetSpacesByType(SpaceType.Type1, ticket).Result;
しかし、これは常に空のリストを返しますが、私は、デバッガでステップスルーあれば、それは何それが必要をしますか。
私は間違っていますか?
はい、これでした。ありがとう! – Adrian