1

我有一些看起来与此类似的代码:

    public IList<Result> GetResult()
    {
        var result = new List<Result>();

        result.AddRange(GetSomeItemsA());
        result.AddRange(GetSomeItemsB());
        result.AddRange(GetSomeItemsC());

        return result;
    }

我想使用任务并行库调用方法 GetSomeItemsA、GetSomeItemsB 和 GetSomeItemsC 或以其他方式使其更快,然后仅在完成三个任务后返回结果。

一般来说,最好的方法是什么,当我们需要从不同来源获取项目然后返回包含来自该来源的所有项目的结果时,如何优化它?

4

2 回答 2

1

您可以使用 PLINQ 来执行此操作:

public IList<Result> GetResult()
{
    return new Func<IEnumerable<Result>>[] { GetSomeItemsA, GetSomeItemsB, GetSomeItemsC  }
        .AsParallel()
        .SelectMany(f => f())
        .ToList();
}
于 2013-07-27T10:21:12.843 回答
0

我做了类似以下的事情:

        var result = new List<Result>();

        var firstTask = new Task<IEnumerable<Result>>(this.GetSomeItemsA);
        var secondTask = new Task<IEnumerable<Result>>(this.GetSomeItemsB);
        var thirdTask = new Task<IEnumerable<Result>>(this.GetSomeItemsC);
        firstTask.Start();
        secondTask.Start();
        thirdTask.Start();

        Task.WaitAll(firstTask, secondTask, thirdTask);

        result.AddRange(firstTask.Result);
        result.AddRange(secondTask.Result);
        result.AddRange(thirdTask.Result);

        return result;
于 2013-07-26T11:39:50.097 回答