基本概念 是一種用於非同步編程的概念。Task的重要特點是可以在後臺執行方法或操作,而不會阻塞主線程或UI線程。 封裝的非同步操作,表示執行的操作正在進行。可以表示一個方法的返回值或者表示執行的操作已經完成。 Task類的主要成員 屬性:TaskStatus、IsCanceled、IsCompleted ...
基本概念
是一種用於非同步編程的概念。Task的重要特點是可以在後臺執行方法或操作,而不會阻塞主線程或UI線程。
封裝的非同步操作,表示執行的操作正在進行。可以表示一個方法的返回值或者表示執行的操作已經完成。
Task類的主要成員
- 屬性:TaskStatus、IsCanceled、IsCompleted、IsFaulted、Exception等
- 方法:Start()、RunSynchronously()、Wait()、WaitAll()、WaitAny()等
- 事件:Completed、Canceled、Faulted等
Task的使用方法
- 使用Task.Factory.StartNew()創建Task
- 非同步運行一個方法或Lambda表達式,立即返回Task對象,然後非同步執行方法或Lambda表達式
- 使用Task.Run()創建Task
- 使用TaskCompletionSource創建Task
- TaskCompletionSource是一個類,允許我們手動創建並控制非同步返回值的Task對象。通常,非同步操作的返回值是在非同步操作完成時由非同步方法設置的,但如果需要手動設置非同步操作的返回值,可以使用TaskCompletionSource
- Task的等待和結果獲取
- Task.Wait()、Task.Result或await關鍵字來等待Task對象完成並獲取非同步操作結果
- 案例
#region 等待非同步完成 Task<int> task = Task.Run(() => { Console.WriteLine("Task Run"); return 42; }); task.Wait(); int result = await task; Console.WriteLine(result); int result1 = task.Result; Console.WriteLine(result1); #endregion
- Task的示例代碼
//並行編程 Parallel.For(1, 100, i => { Console.WriteLine($"Task {i} is running"); }); //非同步編程 Task.Run(() => { Console.WriteLine("非同步執行任務"); }); //Task.WhenAll示例代碼 List<Task> tasks = new List<Task>(); for (int i = 0; i < 10; i++) { int index = i; tasks.Add(Task.Run(() => { Console.WriteLine($"Task {index} is running"); })); } Task.WhenAll(tasks).Wait();
點擊查看代碼 ``` ```