天天看點

Task 異步任務

與其他多線程相比,Task 可以 傳回 異步執行後的結果。根據結果,我們來進一步程式設計

Task 異步任務

static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8;
            //callMethod();
            Method4();
            Console.WriteLine("=================");
            Console.ReadKey();
        }

public static void Method4()
        {
            CancellationTokenSource cts = new CancellationTokenSource();
            //建立一個任務
            Task<int> task = new Task<int>(() =>
            {
                int sum = 0;
                Console.WriteLine("使用Task執行異步操作.");//------2
                for (int i = 0; i < 100; i++)
                {
                    Thread.Sleep(100);
                    sum += i;
                }
                return sum;
            },cts.Token);
            //啟動任務,并安排到目前任務隊列線程中執行任務(System.Threading.Tasks.TaskScheduler)
            task.Start();
            Console.WriteLine("主線程執行其他處理"); //----1
            //任務完成時執行處理。
            Task cwt = task.ContinueWith(t =>
            {
                Thread.Sleep(1000);
                Console.WriteLine("任務完成後的執行結果:{0}", t.Result.ToString());//------4
            });
            Console.WriteLine("主線程執行其他處理2");
            //if(task.Wait(5000))
            //{
            //    Console.WriteLine("task執行超時---------");
            //    cts.Cancel();
            //}
            //task.Wait(); // 會阻塞主線程
            Console.WriteLine("task執行結束");//-----3
            //cwt.Wait();  // 阻塞目前線程,直到回調執行完畢
            Console.WriteLine("task回調執行結束");//-------5
            Console.WriteLine("主線程執行其他處理3");
        }