async 非同步
await 等待
常讓人搞不清楚的地方是
async + await => 程式跑跑跑、跑到一段要執行很久的、那我不如先去跑其他快的,再慢慢等原本那裡好了沒,好了我再回來繼續接著往下做
=> 其實是同一條 Thread
多個 Thread => 把慢的丟到另一個 Thread 跑,讓快的這條 Thread 不要被影響
=> 是兩條 Thread ( 你要自己管理 )
Parallel.For => 假設我要跑 100 條,我一次把 100 個灑出去
=> 但並不代表同時 New 了100 個出來,你只知道他有多條,實際到底有幾條是根據 cpu核心數、目前忙不忙....... 在程式跑的當下動態決定出來的 ( CLR 幫你管理 )
幾點注意事項
1. async 回傳型別必是 Task 或 void ( 通常 async 的函式會再 call 下一個 async 的函式 再 call 下一個 async 的函式.......... 而最初那一個的型別即為 void)
2. 通常被宣告成 async 的函式名稱,尾綴會加上 -Async
3. async 函式內至少有一個 await (下次恢復執行時的起點) ... 不加也可以 但那也就等於是傳統的同步方法的意思
4. await 後一定接一個 Task ( void 無法等 )
執行結果
程式碼
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication4
{
/// <summary>
/// 示範 Async 跟 Await
/// tip: 關鍵字: wait系列, await, result, getResult 要等, 其他都不用
/// </summary>
class Program
{
public static void Main(string[] args)
{
RunAsync_1();
Console.WriteLine("3");
Console.Read();
}
static async Task RunAsync_1()
{
var run2 = RunAsync_2();
Console.WriteLine("2");
await run2; //await 必接一個 Task (其後程式碼皆需等待)
Console.WriteLine("5");
}
static async Task RunAsync_2()
{
Console.WriteLine("1");
await Task.Delay(1000); //要等
Console.WriteLine("4");
}
}
}