现在的位置: 首页 > 综合 > 正文

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

2013年01月08日 ⁄ 综合 ⁄ 共 1088字 ⁄ 字号 评论关闭

利用任务连续性,可以在一个任务结束后启动另一个任务。任务也可以构成一个层次结构。一个任务启动一个新任务时,就启动了一个父/子层次结构。下面的代码段在父任务内部新建一个任务。创建子任务的代码与创建父任务的代码相同,唯一的区别是这个任务从另外一个任务内部创建。

   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创建子任务时,这就无效。

抱歉!评论已关闭.