国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ParallelProgramming-TaskResult&&ContinuationTask

2019-11-14 13:47:55
字體:
來源:轉載
供稿:網友

本文主要介紹帶有返回值的Task和Continuation Task

  1. 帶返回值的Task
  2. Continuation Task
  3. ContinueWhenAll即多任務延續

一、帶返回值的Task

1.1代碼演示

前一篇博客介紹了Task,主要是沒有返回值的Task。本文所介紹的帶有返回值的Task,返回值通過task.Result進行讀取。

  class TaskFuture    {        public int Action()        {            Thread.Sleep(2000);            return 1;        }        public int FutureDemo()        {            var task = Task.Factory.StartNew<int>(Action); ;            return task.Result;        }    }    class PRogram    {        static void Main(string[] args)        {            var stopwatch = Stopwatch.StartNew();            stopwatch.Start();            var result = new TaskFuture().FutureDemo();            Console.WriteLine(result);            Console.WriteLine("Finished");            Console.Read();        }    }

1.2 執行流程

當訪問task.Result的時候有可能Task還沒有開始執行或者Task還沒有執行完畢,這個時候當前線程會被block,一直到task完成并返回result為止。類似于Task.Wait()。當調用Task.Wait()時,調用線程會被block直到Task完成為止。

有一點額外說明:如果在調用Task.Result的時候Task還沒有開始,這個Task有可能不會再啟用新的線程,而是直接在當前的線程運行(inline)。變成了串行。

1.3 運行結果

上面的運行結果展示了上面所說的”block“

 二、Continuation Task

Continuation Task是指在某Task處于某種狀態的時候繼續執行其他Task的操作。

2.1代碼演示

  class ContinueTask    {        public int Action()        {            Console.WriteLine("in Action");            return 1;        }        public void Continue()        {            var task = Task.Factory.StartNew<int>(Action);            var continueTask = task.ContinueWith<int>(t =>            {                Console.WriteLine("in continue Task");                return 2;            });            Console.WriteLine("The result of continie task is " + continueTask.Result);        }    }    class Program    {        static void Main(string[] args)        {            var stopwatch = Stopwatch.StartNew();            stopwatch.Start();            new ContinueTask().Continue();            Console.WriteLine("Finished");            Console.Read();        }    }

2.2 運行結果

2.3 實際應用

ContinueTask可以在多個Task并行執行的時候執行取消操作。詳情點擊。

三、 Task.Factory.ContinueWhenAll

ContinueWhenAll即多任務延續。是指在多個Task完成的時候繼續執行某一個Task。

3.1代碼演示

  class ContinueTask    {        public int Action1()        {            Console.WriteLine("in Action1");            return 1;        }        public int Action2()        {            Console.WriteLine("in Action2");            return 2;        }        public void Continue()        {            var task1 = Task.Factory.StartNew<int>(Action1);            var task2 = Task.Factory.StartNew<int>(Action2);            var continueTask = Task.Factory.ContinueWhenAll<int>(new Task[] { task1, task2 }, (tasks) =>            {                Console.WriteLine("in Continue Task");                return task1.Result + task2.Result;            });            Console.WriteLine("The result of continie task is " + continueTask.Result);        }    }    class Program    {        static void Main(string[] args)        {            var stopwatch = Stopwatch.StartNew();            stopwatch.Start();            new ContinueTask().Continue();            Console.WriteLine("Finished");            Console.Read();        }    }

上面的延續任務中還使用了task1和task2的result。

3.2 運行結果


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长武县| 高尔夫| 永川市| 钟山县| 嘉荫县| 略阳县| 左权县| 舟曲县| 天津市| 青田县| 丹凤县| 吐鲁番市| 木里| 朔州市| 龙胜| 韩城市| 新龙县| 建始县| 祁门县| 北宁市| 长顺县| 诏安县| 长武县| 保亭| 外汇| 天镇县| 缙云县| 乳山市| 曲靖市| 光山县| 来宾市| 泰兴市| 杭锦后旗| 醴陵市| 云和县| 神农架林区| 红安县| 吴忠市| 隆化县| 内黄县| 武功县|