.net framework4.0 新增了Task这个类,其中有个枚举叫TaskStatus,但是我始终无法获得其中的一个叫WaitingForChildrenToComplete的状态:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace ConsoleApplicationTask { class Program { static void Main(string[] args) { var parent = new Task(ParentTask); parent.Start(); Thread.Sleep(2000); Console.WriteLine(parent.Status); Thread.Sleep(6000); Console.WriteLine(parent.Status); Console.ReadLine(); } static void ParentTask() { Console.WriteLine("task id {0}", Task.CurrentId); Thread.Sleep(1000); Console.WriteLine("parent started child"); var child = new Task(ChildTask); child.Start(); } static void ChildTask() { Console.WriteLine("child"); Thread.Sleep(5000); Console.WriteLine("child finished"); } } }
两次parent.Status 都返回 RanToCompletion.为何,照理说第一次应该返回WaitingForChildrenToComplete。
后来发现原来实现父子任务的关系,子任务需要设置一个option来附属到父任务上,如下:
var child = new Task(ChildTask, TaskCreationOptions.AttachedToParent);
这样第一次parent.Status就返回WaitingForChildrenToComplete状态了。