任務也可以構成一個層次結構。一個任務啟動一個新任務時,就啟動了一個層次結構。下面的代碼段在父任務內部新建一個任務。創建子任務的代碼與創建父任務的代碼相同,唯一的區別是這個任務從另一個任務內部創建:
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: }
結果如圖:
總體來說,層次任務沒有新東西,但需要注意的是,父任務在子任務之前結束(如上例),父任務的狀態變為WaitingForChildrenToComplete,直到所有子任務結束,父任務狀態才變為RunToCompletion。如果父任務中創建子任務時,TaskCreationOptions枚舉為DetectedFromParent,上述無效。
參考資料:《C#高級編程》,http://topic.csdn.net/u/20120306/20/24961e41-5bf2-4b81-b45b-3cdd714b12d8.html
本文源代碼: