关于TaskStatus状态WaitingForChildrenToComplete 的疑问
.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状态了。