| Created |该任务已初始化,但尚未被计划。
| Faulted |由于未处理异常的原因而完成的任务。
| RanToCompletion |已成功完成执行的任务。
| Running |该任务正在运行,但尚未完成。
| WaitingForActivation |该任务正在等待 .NET Framework 基础结构在内部将其激活并进行计划。
| WaitingForChildrenToComplete |该任务已完成执行,正在隐式等待附加的子任务完成。
| WaitingToRun |该任务已被计划执行,但尚未开始执行。
任务嵌套
任务嵌套就是指在一个任务中又创建了一个任务。
而新建的任务就是子任务。在没有特殊声明的情况下,父子任务是一起运行的。
如SimpleNestedTask方法。
父子任务关联需要在创建子任务的时候,增加参数TaskCreationOptions.AttachedToParent。
将父子任务关联起来,此时父任务将等待子任务结束,才会完成。
如果使用Task创建任务,不需要使用TaskCreationOptions.AttachedToParent参数,因为只要父任务使用了子任务的返回结果,父任务自然就会等待子任务完成。
public class Program
{
static void Main(string[] args)
{
WaitForSimpleNestedTask();
Console.WriteLine("=====================================================");
SimpleNestedTask();
Thread.SpinWait(600000);//等待SimpleNestedTask结束 再运行
Console.WriteLine("=====================================================");
//SimpleNestedTaskAttachedToParent();
Console.Read();
}
static void WaitForSimpleNestedTask()
{
var outer = Task.Factory.StartNew(() =>
{
Console.WriteLine("Outer1 task executing.");
var nested = Task.Factory.StartNew(() =>
{
Console.WriteLine("Nested1 task starting.");
Thread.SpinWait(5000000);
Console.WriteLine("Nested1 task completing.");
return 42;
});
return nested.Result;
return 1;
});
Console.WriteLine("Outer1 has returned {0}.", outer.Result);
}
static void SimpleNestedTask()
{
var parent = Task.Factory.StartNew(() =>
{
Console.WriteLine("Outer2 task executing.");
var child = Task.Factory.StartNew(() =>
{
Console.WriteLine("Nested2 task starting.");
Thread.SpinWait(500000);
Console.WriteLine("Nested2 task completing.");
});
});
parent.Wait();
Console.WriteLine("Outer2 has completed.");
}
static void SimpleNestedTaskAttachedToParent()
{
var parent = Task.Factory.StartNew(() =>
{
Console.WriteLine("Outer3 task executing.");
var child = Task.Factory.StartNew(() =>
{
Console.WriteLine("Nested3 task starting.");
Thread.SpinWait(500000);
Console.WriteLine("Nested3 task completing.");
}, TaskCreationOptions.AttachedToParent);
});
parent.Wait();
Console.WriteLine("Outer has completed.");
}










