生活随笔
收集整理的這篇文章主要介紹了
C#嵌套任务和子任务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
任務嵌套就是指在一個任務中又創建了一個任務,而這個新建的任務,就被稱為子任務。在沒有特殊聲明的情況下,父子任務是一起運行的,如SimpleNestedTask方法。
如果想讓父子任務關聯起來的話,需要在創建子任務的時候,增加參數TaskCreationOptions.AttachedToParent,將父子任務關聯起來,這樣父任務將等待子任務完成,才會完成。
如果使用Task<TResult>創建任務的話,這不需要使用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<
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;});// 父任務等待子任務完成return nested.Result;// 父任務不等待子任務完成//return 1;
});//輸出的時候使用了返回值outer.Result,所以自動等待父任務完成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);//增加參數TaskCreationOptions.AttachedToParent,將子任務附加進父任務,這樣子任務完成后,父任務才算完成。
});//等待父任務完成,再輸出字符串,如果沒有這個等待,這句話會先輸出
parent.Wait();Console.WriteLine("Outer has completed.");} View Code ?
轉載于:https://www.cnblogs.com/kiba/archive/2013/06/14/3134953.html
總結
以上是生活随笔為你收集整理的C#嵌套任务和子任务的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。