执行并行任务 - >等待所有 - >利用结果

时间:2013-11-28 14:20:25

标签: c# asp.net

GetSystems()GetActions()都返回不同类型的IEnumerable<T>。访问以下结果我需要做什么?我是否需要使用Task.WaitAll()或类似的东西?

Task t1 = new Task(() => GetSystems());
Task t2 = new Task(() => GetActions());

List<Task> tasks = new List<Task>() { t1, t2 };

Parallel.ForEach(tasks, t =>
                          {
                              t.Start();
                          });

//t1.Result...?

我正在使用C#4.0。

更新

private Task<List<SYSTEM>> GetSystems()
{
    return Task.Factory.StartNew(() =>
    {
        using (var context = new DbContext())
        {
            return context.SYSTEM.ToList();
        }
    });
}

1 个答案:

答案 0 :(得分:4)

您需要使用Task<T>才能使用Result属性。鉴于评论,它看起来像你想要的:

Task<List<SYSTEM>> t1 = ...;
Task<List<ACTION>> t2 = ...;

Task[] tasks = { t1, t2 };

Parallel.ForEach(tasks, t => t.Start());

Task.WaitAll(tasks);

List<SYSTEM> systems = t1.Result;
List<ACTION> actions = t2.Result;

你应该考虑如何处理失败案件。