其實所有跟 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-處理資料需要一些時間";
}
}
}