0
如果我使用System.Threading.Task
運行並行任務是這樣的:System.Threading.Task等待疑問
Func<MyResult> func=ComputeResult;
var t = Task.Facroty.StartNew<MyResult>(ComputeResult, 1);//1 is some id
t.Wait();
var tt = Task.Facroty.StartNew<MyResult>(ComputeResult, 2);
tt.Wait();
威爾t.Wait()
塊下一條語句。
如果我在一個循環中啓動幾個任務,並且希望以循環中的任務不會阻止彼此而是循環被阻止後的所有內容等待它們。
我使用下面的結構:
var tasks=new List<Task<MyResult>>();
Func<MyResult> func=ComputeResult;
for(int i=0; i<10;i++)
{
var t=Task.Facroty.StartNew<MyResult>(ComputeResult, i);
tasks.Add(t);
//t.Wait(); //SHOULD I CALL WAIT HERE?
}
//OR THIS BETTER OR EVEN IF THIS WORKS
foreach(var t in tasks)
{
t.Wait();
}
//do other stuff
編輯: - 在最終的形式,我使用下面的行,而不是最後foreach
循環。
Task.WaitAll(tasks.ToArray());
很好的建議。 Ids來自datatable,明天會嘗試。我不需要'ToArray',但我可能需要支持取消。 – TheVillageIdiot 2011-04-01 17:52:43