利用任務連續性,可以在一個任務結束后啟動另一個任務。任務也可以構成一個層次結構。一個任務啟動一個新任務時,就啟動了一個父/子層次結構。下面的代碼段在父任務內部新建一個任務。創建子任務的代碼與創建父任務的代碼相同,唯一的區別是這個任務從另外一個任務內部創建。
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: }
該實例運行的效果如下:
如果父任務在子任務之前結束,父任務的狀態就顯示為WaitingForChildrenToComplete。只要子任務也結束時,父任務就變成RanToCompletion。如果父任務用TaskCreationOptions枚舉中的DetachedFromParent創建子任務時,這就無效。