生活随笔
收集整理的這篇文章主要介紹了
C#嵌套任务和子任务
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
任務(wù)嵌套就是指在一個任務(wù)中又創(chuàng)建了一個任務(wù),而這個新建的任務(wù),就被稱為子任務(wù)。在沒有特殊聲明的情況下,父子任務(wù)是一起運(yùn)行的,如SimpleNestedTask方法。
如果想讓父子任務(wù)關(guān)聯(lián)起來的話,需要在創(chuàng)建子任務(wù)的時候,增加參數(shù)TaskCreationOptions.AttachedToParent,將父子任務(wù)關(guān)聯(lián)起來,這樣父任務(wù)將等待子任務(wù)完成,才會完成。
如果使用Task<TResult>創(chuàng)建任務(wù)的話,這不需要使用TaskCreationOptions.AttachedToParent參數(shù)了,因為只要父任務(wù)使用了子任務(wù)的返回結(jié)果,父任務(wù)自然就會等待子任務(wù)完成。
public class Program{static void Main(
string[] args){ WaitForSimpleNestedTask();Console.WriteLine("=====================================================");SimpleNestedTask();Thread.SpinWait(600000);
//等待SimpleNestedTask結(jié)束 再運(yùn)行Console.WriteLine(
"=====================================================");//SimpleNestedTaskAttachedToParent();
Console.Read();}static void WaitForSimpleNestedTask(){var outer = Task<
int>.Factory.StartNew(() =>
{Console.WriteLine("Outer1 task executing.");var nested = Task<
int>.Factory.StartNew(() =>
{Console.WriteLine("Nested1 task starting.");Thread.SpinWait(5000000);Console.WriteLine("Nested1 task completing.");return 42;});// 父任務(wù)等待子任務(wù)完成return nested.Result;// 父任務(wù)不等待子任務(wù)完成//return 1;
});//輸出的時候使用了返回值outer.Result,所以自動等待父任務(wù)完成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.");});});//等待父任務(wù)完成,再輸出字符串,如果沒有這個等待,這句話會先輸出
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);//增加參數(shù)TaskCreationOptions.AttachedToParent,將子任務(wù)附加進(jìn)父任務(wù),這樣子任務(wù)完成后,父任務(wù)才算完成。
});//等待父任務(wù)完成,再輸出字符串,如果沒有這個等待,這句話會先輸出
parent.Wait();Console.WriteLine("Outer has completed.");} View Code ?
轉(zhuǎn)載于:https://www.cnblogs.com/kiba/archive/2013/06/14/3134953.html
總結(jié)
以上是生活随笔為你收集整理的C#嵌套任务和子任务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。