首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 4.0 新功能:Task 非同步工作與傳回值獲取

     編輯:關於.NET

傳統線程池限制

ThreadPool.QueueUserWorkItem 接受 WaitCallback 委派,傳回型別為 void,無法取得工作執行結果。

.NET 4.0 解決方案:Task / Task<TResult>

位於 System.Threading.Tasks 命名空間,支援傳回值、等待完成、異常處理、續作鏈結。

基本範例

using System;
using System.Threading;
using System.Threading.Tasks;

namespace TaskDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Task task = new Task(() => Sum()); // 建立工作
            task.Start();                                 // 排程執行
            Console.WriteLine("任務已啟動");
            task.Wait();                                  // 等待完成
            Console.WriteLine($"結果: {task.Result}");   // 取得傳回值
        }

        static int Sum()
        {
            Console.WriteLine("任務正在執行...");
            int sum = 0;
            for (int i = 1; i <= 100; i++) { Thread.Sleep(5); sum += i; }
            return sum; // 5050
        }
    }
}

關鍵優勢

  • 傳回值:Task<TResult>.Result 直接取得
  • 等待:Wait()、WaitAll()、WaitAny()
  • 異常傳播:工作內部例外會包裝在 AggregateException 中於 Wait() 或 Result 存取時拋出
  • 續作:ContinueWith 鏈結後續工作
  • 取消支援:整合 CancellationToken

致謝

參考自 Jeffrey Richter 《CLR via C#, Third Edition》,強烈推薦深入研讀。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved