C#嵌套任务和子任务
任务嵌套就是指在一个任务中又创建了一个任务,而这个新建的任务,就被称为子任务。在没有特殊声明的情况下,父子任务是一起运行的,如SimpleNestedTask方法。 如果想让父子任务关联起来的话,需要在创建子任务的时候,增加参数TaskCreationOptions.AttachedToParent,将父子任务关联起来,这样父任务将等待子任务完成,才会完成。 如果使用Task Main();
Console.WriteLine(
outer = Task<>.Factory.StartNew(() =>
</span><span style="color: #0000ff;">var</span> nested = Task<<span style="color: #0000ff;">int</span>>.Factory.StartNew(() =><span style="color: #000000;">
{
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">Nested1 task starting.</span><span style="color: #800000;">"</span><span style="color: #000000;">);
Thread.SpinWait(</span><span style="color: #800080;">5000000</span><span style="color: #000000;">);
Console.WriteLine(</span><span style="color: #800000;">"</span><span style="color: #800000;">Nested1 task completing.</span><span style="color: #800000;">"</span><span style="color: #000000;">);
</span><span style="color: #0000ff;">return</span> <span style="color: #800080;">42</span><span style="color: #000000;">;
});
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 父任务等待子任务完成</span>
<span style="color: #0000ff;">return</span><span style="color: #000000;"> nested.Result;
</span><span style="color: #008000;">//</span><span style="color: #008000;"> 父任务不等待子任务完成
</span><span style="color: #008000;">//</span><span style="color: #008000;">return 1;</span>
<span style="color: #000000;"> }); Console.WriteLine(<span style="color: #800000;">"<span style="color: #800000;">Outer1 has returned {0}.<span style="color: #800000;">"<span style="color: #000000;">,outer.Result); } <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> SimpleNestedTask() { <span style="color: #0000ff;">var parent = Task.Factory.StartNew(() =><span style="color: #000000;"> { Console.WriteLine(<span style="color: #800000;">"<span style="color: #800000;">Outer2 task executing.<span style="color: #800000;">"<span style="color: #000000;">);
<span style="color: #000000;"> parent.Wait(); }
<span style="color: #000000;"> });
<span style="color: #000000;"> parent.Wait(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |