C# 执行并行任务->;等待全部->;利用结果

C# 执行并行任务->;等待全部->;利用结果,c#,asp.net,C#,Asp.net,GetSystems()和GetActions()都返回不同类型的IEnumerable。我需要做什么才能访问下面的结果?我是否需要使用Task.WaitAll()或类似的工具 Task t1 = new Task(() => GetSystems()); Task t2 = new Task(() => GetActions()); List<Task> tasks = new List<Task>() { t1, t2 }; Parallel.ForE

GetSystems()
GetActions()
都返回不同类型的
IEnumerable
。我需要做什么才能访问下面的结果?我是否需要使用
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...?
taskt1=新任务(()=>GetSystems());
任务t2=新任务(()=>GetActions());
列表任务=新列表(){t1,t2};
Parallel.ForEach(任务,t=>
{
t、 Start();
});
//t1.结果。。。?
我用的是C#4.0

更新:

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

您需要使用
任务
才能使用
结果
属性。根据这些评论,您似乎希望:

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;
taskt1=。。。;
任务t2=。。。;
Task[]tasks={t1,t2};
Parallel.ForEach(tasks,t=>t.Start());
Task.WaitAll(任务);
列表系统=t1。结果;
列出行动=t2.结果;

您应该考虑如何处理失败案例。

<代码>任务<代码>没有<代码>结果< /代码>属性>代码>任务执行。我们不知道
GetSystems
GetActions
做什么,但您几乎肯定想要某种形式的
任务。@jonsket Right,我已经用其中一种方法更新了当前状态。你介意告诉我如何使它返回所需的类型吗?听起来你想要
Task
t1=newtask(()=>GetSystems())<代码>。但是,您几乎肯定要返回
context.SYSTEM.ToList()`否则它对您没有用处…@JonSkeet谢谢,您对我更新的代码片段有什么异议吗?@JonSkeet好的,谢谢。请将其作为答案发布,以便我可以给您代表:)然后执行
任务。ToArray()
:)