2013-11-28 67 views
3

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(); 
     } 
    }); 
} 
+3

'Task'沒有'Result'屬性。 '任務'確實。我們不知道「GetSystems」或「GetActions」是做什麼的,但你幾乎肯定需要某種形式的「任務」。 –

+0

@JonSkeet對,我已經更新了當前狀態下的一種方法。你介意告訴我如何讓它返回所需的類型嗎? – Johan

+0

好吧,它聽起來像你想要的任務> t1 =新任務(()=> GetSystems());'。然而,你幾乎肯定希望返回'context.SYSTEM.ToList()',否則它不會對你有用...... –

回答

4

你需要爲了使用Result財產使用Task<T>。鑑於評論,它看起來像你想要的:

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; 

你應該考慮你將如何處理失敗的情況,雖然。

+0

然後做一個'tasks.ToArray()':) –

+1

@Johan :編輯,謝謝。對於那個很抱歉 :) –

相關問題