[Task - 4] GetAwaiter()

  • 30448
  • 0
  • C#
  • 2018-04-11

其實所有跟 Task 有關的操作裡面,重要的事情一直只有一項

哪些會繼續往下跑、還有哪些會阻塞 (要等的意思)

今天再來看看 GetAwaiter() 的阻塞與不阻塞

 

執行結果

 

程式碼

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

namespace ConsoleApplication6
{
    /// <summary>
    /// 示範 GetAwaiter()
    /// tip: 關鍵字: wait系列, await, result, getResult 要等, 其他都不用
    /// </summary>
    class Program
    {
        public static void Main(string[] args)
        {
            var task = RunAsync_1();
            task.GetAwaiter().OnCompleted(() =>
            {
                Console.WriteLine(task.Result);
            });
            Console.WriteLine("1-我會先跑");
            task.Wait(); //要等

            var result = RunAsync_2().GetAwaiter().GetResult();  //要等
            Console.WriteLine(result);
            Console.WriteLine("4-這次不會先跑了");

            Console.Read();
        }

        static async Task<string> RunAsync_1()
        {
            await Task.Delay(1000);  //要等
            return "2-處理資料需要一些時間";
        }

        static async Task<string> RunAsync_2()
        {
            await Task.Delay(1000);  //要等
            return "3-處理資料需要一些時間";
        }
    }
}