C#中Task.ContinueWith連續任務使用實例
通過任務,可以指定在任務完成之後,應開始運行之後另一個特定任務。例如,一個使用前一個任務的結果的新任務,如果前一個任務失敗瞭,這個任務就應執行一些清理工作。任務處理程序都不帶參數或者帶一個對象參數,而任務的連續處理方法都有一個Task類型的參數,這裡可以訪問起始任務的相關信息:
如下面的示例代碼:
class Program { static void DoOnFirst() { Console.WriteLine($"doing some task{Task.CurrentId}"); Thread.Sleep(3000); } static void DoOnSecond(Task t) { Console.WriteLine($"task {t.Id} finished"); Console.WriteLine($"this task id {Task.CurrentId}"); Console.WriteLine("doing 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(); } }
連續任務通過在任務上調用ContinueWith()方法來定義。也可以使用TaskFactory類來定義。t1.ContinueWith(DoOnSecond)方法表示,調用DoOnSecond()方法的新任務應在任務t1結束時立即啟動。在一個任務結束時,可以啟動多個任務,連續任務也可以有另外一個連續任務。如下面的例子所示:
Task t1 = new Task(DoOnFirst); t1.Start(); Task t2 = t1.ContinueWith(DoOnSecond); Task t3 = t1.ContinueWith(DoOnSecond); Task t4 = t2.ContinueWith(DoOnSecond);
使用TaskCreationOptions枚舉中的值,可以指定,連續的任務隻有在起始任務成功(或者失敗)結束時啟動。一些可能的值是OnlyOnFaulted、NotOnFaulted 、OnlyOnCanceled、NotOnCanceled和OnlyOnRanToCompletion。
Task t5 = t1.ContinueWith(DoOnError, TaskContinuationOptions.OnlyOnFaulted)
C# Task.ContinueWith 返回對象
使用Task.ContinueWith 可以在Task完成時而繼續執行的邏輯
當在ContinueWith中需要返回一個對象時,應該如何使用
下方代碼可以表示,在設置緩存完成後,重新讀取緩存,並返回
var item = await SetCacheItemAsync("key", cacheItems) .ContinueWith<>(async _ => await cacheItem.GetAsync(key));
到此這篇關於C#中Task.ContinueWith連續任務使用實例的文章就介紹到這瞭,更多相關C# Task.ContinueWith內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- .Net中Task Parallel Library的進階用法
- .Net中Task Parallel Library的基本用法
- C# 並行和多線程編程——認識和使用Task
- C#中的Task.Delay()和Thread.Sleep()區別(代碼案例)
- c# Task.Wait()與awaiat Task異常處理的區別說明