Ich muss einen Webservice mehrere Male aufrufen, da es eine Grenze von 100 Objekten pro Aufruf zurückgegeben hat, und ich möchte dies parallel tun.Ich erwarte mehrere Aufgaben in einer Schleife
Ich mache eine Aufgabe für jeden Web-Service-Aufruf und ich stoppe, wenn eine Aufgabe weniger als die Grenze der Elemente zurückgibt, was bedeutet, dass es keine weiteren Elemente zu erhalten gibt.
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;
}
Ich bin mit diesem synchron zu Testzwecken:
var spaces = Space.GetSpacesByType(SpaceType.Type1, ticket).Result;
aber dies immer eine leere Liste zurück, aber wenn ich mit dem Debugger Schritt durch tut, was es soll.
Was mache ich falsch?
Ja, das war es. Vielen Dank! – Adrian