下面的示例演示一个父任务,该父任务创建一个简单的嵌套任务。
static void SimpleNestedTask() { var parent = Task.Factory.StartNew(() => { Console.WriteLine("Outer task executing."); var child = Task.Factory.StartNew(() => { Console.WriteLine("Nested task starting."); Thread.SpinWait(500000); Console.WriteLine("Nested task completing."); }); }); parent.Wait(); Console.WriteLine("Outer has completed."); } /* Sample output: Outer task executing. Nested task starting. Outer has completed. Nested task completing. */
AttachedToParent 选项(如下面的示例所示),
将生成以下输出。
AttachedToParent 选项以创建子任务。
下表列出了两种子任务的基本区别。
|
类别 |
嵌套任务 |
附加的子任务 |
|---|---|---|
|
外部任务(父任务)等待内部任务完成。 |
否 |
是 |
|
父任务传播子任务(内部任务)引发的异常。 |
否 |
是 |
|
父任务(外部任务)的状态依赖于子任务(内部的任务)的状态。 |
否 |
是 |
Result 属性处于阻止状态,直到其任务完成。
static void WaitForSimpleNestedTask() { var outer = Task<int>.Factory.StartNew(() => { Console.WriteLine("Outer task executing."); var nested = Task<int>.Factory.StartNew(() => { Console.WriteLine("Nested task starting."); Thread.SpinWait(5000000); Console.WriteLine("Nested task completing."); return 42; }); // Parent will wait for this detached child. return nested.Result; }); Console.WriteLine("Outer has returned {0}.", outer.Result); } /* Sample output: Outer task executing. Nested task starting. Nested task completing. Outer has returned 42. */