2013-05-31 89 views
1

當我運行此代碼時,出現一個我不明白的異常:「可能無法對繼續任務調用啓動」。請告訴我我做錯了什麼。從列表中運行任務

List<Task> TasksList = new List<Task>(); 
     for (int i = 0; i < ThreadsNumber; i++) 
     { 
      int local = i; 
      var task = new Task<List<string>>(() => PrimeTask(Ratio * local, (local + 1) * Ratio)) 
       .ContinueWith((t) => UpdatePrimesList(t.Result)); 
      TasksList.Add(task); 
      TasksList[i].Start(); 
     } 

     Task.WaitAny(TasksList.ToArray()); 
+1

這是什麼語言?用語言標記問題。 – Noctua

+1

你能發佈例外嗎? – fvrghl

+0

看看這個'MSDN發佈'http://msdn.microsoft.com/en-us/library/ee372288.aspx – MethodMan

回答

7

的這裏的問題是,task是不是指你創建的第一個任務,而是你與ContinueWith創建一個。

即,此結構:

var task = new Task<..>(...).ContinueWith(...); 

將引用ContinueWith返回的任務。您不再提及第一項任務。

它基本上與此相同:

var task = new SomeObject().SomeMethodReturningAnotherObject(); 

在這裏,你不再有參考SomeObject,只是一個參考任何SomeMethodReturningAnotherObject不會返回的方法。

而是做到這一點:

var task = new Task<..>(...); 
task.ContinueWith(...); 
TaskList.Add(task); 
task.Start(); 

這將正常啓動的第一個任務,而不是嘗試啓動後續任務,爲你的異常消息告訴你。