通過(guò)任務(wù),可以指定在任務(wù)完成之后,應開(kāi)始運行之后另一個(gè)特定任務(wù)。例如,一個(gè)使用前一個(gè)任務(wù)的結果的新任務(wù),如果前一個(gè)任務(wù)失敗了,這個(gè)任務(wù)就應執行一些清理工作。任務(wù)處理程序都不帶參數或者帶一個(gè)對象參數,而任務(wù)的連續處理方法都有一個(gè)Task類(lèi)型的參數,這里可以訪(fǎng)問(wèn)起始任務(wù)的相關(guān)信息:
如下面的示例代碼:
sing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace TaskSamples { class Program { static void DoOnFirst() { Console.WriteLine("doing some task {0}",Task.CurrentId); Thread.Sleep(3000); } static void DoOnSecond(Task t) { Console.WriteLine("task {0} finished",t.Id); Console.WriteLine("this task id {0}", Task.CurrentId); Console.WriteLine("do some cleanup"); Thread.Sleep(3000); } static void Main(string[] args) { Task t1 = new Task(DoOnFirst); t1.Start(); Task t2 = t1.ContinueWith(DoOnSecond); Task t3 = t1.ContinueWith(DoOnSecond); Task t4 = t2.ContinueWith(DoOnSecond); Console.ReadKey(); } } }連續任務(wù)通過(guò)在任務(wù)上調用ContinueWith()方法來(lái)定義。也可以使用TaskFactory類(lèi)來(lái)定義。t1.ContinueWith(DoOnSecond)方法表示,調用DoOnSecond()方法的新任務(wù)應在任務(wù)t1結束時(shí)立即啟動(dòng)。在一個(gè)任務(wù)結束時(shí),可以啟動(dòng)多個(gè)任務(wù),連續任務(wù)也可以有另外一個(gè)連續任務(wù)。如下面的例子所示:
Task t1 = new Task(DoOnFirst); t1.Start(); Task t2 = t1.ContinueWith(DoOnSecond); Task t3 = t1.ContinueWith(DoOnSecond); Task t4 = t2.ContinueWith(DoOnSecond);
使用TaskCreationOptions枚舉中的值,可以指定,連續的任務(wù)只有在起始任務(wù)成功(或者失敗)結束時(shí)啟動(dòng)。一些可能的值是OnlyOnFaulted、NotOnFaulted 、OnlyOnCanceled、NotOnCanceled和OnlyOnRanToCompletion。
Task t5 = t1.ContinueWith(DoOnError, TaskContinuationOptions.OnlyOnFaulted聯(lián)系客服