[Task - 2] Wait 與 ContinueWith

  • 29612
  • 0
  • C#
  • 2018-04-09

前面我們看過了 Task 幾種使用方法

那如果今天我們想要的是

1. 三個好友同時搶廉航機票,只要任一人搶成功,就可以成行

=> Task.WaitAny

2. 三個好友同時從起點出發,全部都抵達終點才算獲勝

=> Task.WaitAll

3. 三個好友接力賽跑,A 跑完才能換 B,B 跑完才能換 C

=> ContinueWith

 

結果如下

程式碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication7
{
    /// <summary>
    /// 示範 WaitAny 跟 WaitAll
    /// tip: 關鍵字: wait系列, await, result, getResult 要等, 其他都不用
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            var task1 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(300);
                Console.WriteLine("task1 - OK");
            });

            var task2 = Task.Factory.StartNew(() =>
            {
                Thread.Sleep(600);
                Console.WriteLine("task2 - OK");
            }).ContinueWith(q =>
            {
                Console.WriteLine("task2 - Continue - OK");
            });

            //Task.WaitAny()
            Task.WaitAny(task1, task2);
            Console.WriteLine("任一 Task 完成");

            //Task.WaitAll()
            Task.WaitAll(task1, task2);
            Console.WriteLine("所有 Task 都完成");

            Console.Read();
        }
    }
}