C#異步編程的實現方式(6)——層次任務


任務也可以構成一個層次結構。一個任務啟動一個新任務時,就啟動了一個層次結構。下面的代碼段在父任務內部新建一個任務。創建子任務的代碼與創建父任務的代碼相同,唯一的區別是這個任務從另一個任務內部創建:

   1: static void Main(string[] args)
   2: {
   3:     Task parentTask = new Task(ParentTask);
   4:     parentTask.Start();
   5:  
   6:     Console.Read();
   7: }
   8:  
   9: static void ParentTask()
  10: {
  11:     Console.WriteLine("Parent task is starting");
  12:     Task childTask = new Task(ChildTask);
  13:     childTask.Start();
  14:     Thread.Sleep(2000);
  15:     Console.WriteLine("Parent task is finished");
  16: }
  17:  
  18: static void ChildTask()
  19: {
  20:     Console.WriteLine("Child task started");
  21:     Thread.Sleep(4000);
  22:     Console.WriteLine("Child task is finished");
  23: }

結果如圖:

image

總體來說,層次任務沒有新東西,但需要注意的是,父任務在子任務之前結束(如上例),父任務的狀態變為WaitingForChildrenToComplete,直到所有子任務結束,父任務狀態才變為RunToCompletion。如果父任務中創建子任務時,TaskCreationOptions枚舉為DetectedFromParent,上述無效。


參考資料:《C#高級編程》,http://topic.csdn.net/u/20120306/20/24961e41-5bf2-4b81-b45b-3cdd714b12d8.html

本文源代碼:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM