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: }
该实例运行的效果如下:
如果父任务在子任务之前结束,父任务的状态就显示为WaitingForChildrenToComplete。只要子任务也结束时,父任务就变成RanToCompletion。如果父任务用TaskCreationOptions枚举中的DetachedFromParent创建子任务时,这就无效。