標題
- Task
- await
- async
- Unity協程
Task
Task是聲明異步任務的必要關鍵字,也可以使用Task<>泛型來定義Task的返回值。
await
await是用于等待一個Task結束,否則讓出該線程控制權,讓步給其他線程,直到該Task結束才往下運行。
async
異步聲明的關鍵詞。
舉例:
MyTask聲明了一個Task,該Task又匿名函數定義不接受參數,并且函數主體是睡覺1秒。Task.Run用于分配線程資源,如果該任務完成就歸還線程資源到線程池,后續await task等待該函數完成,并且打印信息。
namespace ConsoleApp1
{internal class Program{static async Task Main(string[] args){Program program = new Program();await program.MyTask();}public async Task MyTask(){Task task = Task.Run(() =>{Thread.Sleep(1000);});await task;Console.WriteLine("This is Task");}}
}
Unity協程
協程是同步的,由主線程調度。
public class CoroutineExample : MonoBehaviour
{void Start(){// 啟動協程StartCoroutine(MyTask());}IEnumerator MyTask(){Debug.Log("開始任務");// 等待1秒yield return new WaitForSeconds(1f);Debug.Log("1秒后執行此代碼");}
}