我需要多次调用webservice,因为每个调用返回的对象数限制为100个,我希望并行执行此操作。
我为每个Web服务调用创建一个任务,当任务返回的项目数量少于项目限制时,我就停止了,这意味着没有更多的项目可以获得。
var spaces = Space.GetSpacesByType(SpaceType.Type1, ticket).Result;
为了测试目的,我同步运行它:
{{1}}
然而,这总是会返回一个空列表,但是如果我逐步调试它,它确实会做它应该做的事情。
我做错了什么?
答案 0 :(得分:2)
我相信它是由闭包变量引起的。尝试将其更改为
for(int i = 0; i < degreeOfParallelism; i++)
{
var n = i;
tasks[i] = Task.Run<List<Space>>( () => GetSpacesAtOffset(offset + (n * RETURN_LIMIT), RETURN_LIMIT, ticket, null, type.ToString()) ); //GetSpacesAtOffset is a synchronous method
}