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: }
结果如图:
总体来说,层次任务没有新东西,但需要注意的是,父任务在子任务之前结束(如上例),父任务的状态变为WaitingForChildrenToComplete,直到所有子任务结束,父任务状态才变为RunToCompletion。如果父任务中创建子任务时,TaskCreationOptions枚举为DetectedFromParent,上述无效。
参考资料:《C#高级编程》,http://topic.csdn.net/u/20120306/20/24961e41-5bf2-4b81-b45b-3cdd714b12d8.html
本文源代码: