C# Task的使用---嵌套使用Task


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

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Threading;
   6: using System.Threading.Tasks;
   7: namespace TaskSamples   
   8: {
   9:     class Program
  10:     {
  11:        static void ParentAndChild()
  12:         {
  13:             var parent = new Task(ParentTask);
  14:             parent.Start();
  15:             Thread.Sleep(2000);
  16:             Console.WriteLine(parent.Status);
  17:             Thread.Sleep(4000);
  18:             Console.WriteLine(parent.Status);
  19:         }
  20:  
  21:         static void ParentTask()
  22:         {
  23:             Console.WriteLine("task id {0}", Task.CurrentId);
  24:             var child = new Task(ChildTask);
  25:             child.Start();
  26:             Thread.Sleep(1000);
  27:             Console.WriteLine("parent started child");
  28:         }
  29:  
  30:         static void ChildTask()
  31:         {
  32:             Console.WriteLine("child");
  33:             Thread.Sleep(5000);
  34:             Console.WriteLine("child finished");
  35:         }
  36:  
  37:         static void Main(string[] args)
  38:         {
  39:             ParentAndChild();
  40:             Console.ReadKey();
  41:           }
  42:     }
  43: }

該實例運行的效果如下:

image

 

如果父任務在子任務之前結束,父任務的狀態就顯示為WaitingForChildrenToComplete。只要子任務也結束時,父任務就變成RanToCompletion。如果父任務用TaskCreationOptions枚舉中的DetachedFromParent創建子任務時,這就無效。


免責聲明!

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



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