等待循环中的多个任务

时间:2016-07-12 12:51:16

标签: c# async-await task

我需要多次调用webservice,因为每个调用返回的对象数限制为100个,我希望并行执行此操作。

我为每个Web服务调用创建一个任务,当任务返回的项目数量少于项目限制时,我就停止了,这意味着没有更多的项目可以获得。

var spaces = Space.GetSpacesByType(SpaceType.Type1, ticket).Result;

为了测试目的,我同步运行它:

{{1}}

然而,这总是会返回一个空列表,但是如果我逐步调试它,它确实会做它应该做的事情。

我做错了什么?

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
    }