2015-06-20 69 views
0

給定一個Task實例,如何判斷是否已調用ContinueWith?我想知道我是否是鏈中執行的最後一項任務。,我可以告訴它是否已經調用了ContinueWith?

Task task = Task.FromResult(); 
void SomeMethod(var x) { 
    task = task.ContinueWith(previous => { 
     if (task.ContinueWith is called) return; 
     // do something with x... 
    } 
} 
+0

我不知道如何在一般情況下有幫助。 「ContinueWith」可能不是最後一個。 –

+0

@JohnSaunders,我不確定我是否理解你的陳述。也許我的例子太蹩腳了。我對創建三個任務的場景感興趣。第一個完成,因爲它開始。第二個(以及所有中間任務)被跳過,因爲第三個在第一個完成之前被添加。 – Brannon

+1

也許你的實際問題更好的例子會更有意義。 –

回答

-1

你可以有一個靜態變量(字典對象)宣佈對家長和獨特的鍵值更新當你的任務被觸發。您可以監視此靜態變量,以查看是否所有其他線程都已完成執行。

+0

想象一下我的軟件運行很長時間。我不知道什麼時候所有的任務都完成了,因爲它是無法量化的。我只想跳過不是最近請求的任務。 – Brannon

+0

想想更多,但是,也許我所需要的是某種增量變量,在調用ContinueWith之前增量,然後與執行中的本地副本進行比較。 – Brannon

+0

是的,這應該工作。否則,很難跟蹤信息,因爲每個任務都是相互獨立運行的 – Martin

0

如果你的意思是多個延續。一個可能的解決方案可能是這樣的。

class Program 
    { 
     public class TaskState 
     { 
      public bool Ended { get; set; } 
     } 

     static void Main(string[] args) 
     { 
      var task = Task.FromResult("Stackoverflow"); 
      var state = new TaskState(); 
      task.ContinueWith((result, continuationState) => 
      { 
       Console.WriteLine("in first"); 


      }, state).ContinueWith((result, continuationState) => 
      { 
       if (!state.Ended) 
        Console.WriteLine("in second"); 
       state.Ended = true; 

      }, state).ContinueWith((result, continuationState) => 
      { 
       if (!state.Ended) 
        Console.WriteLine("in third"); 
       state.Ended = true; 

      }, state); 
      Console.ReadLine(); 
     } 

    } 
相關問題