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

.NET 並行程式設計系列(二):Task 建立、參數傳遞、結果取得與建構選項

     編輯:關於.NET

Task 是 TPL 核心類別,代表一項非同步工作。本文涵蓋建立方式、參數傳遞、結果取得與進階建構選項。

建立 Task 的四種語法

// 1. 命名方法委托
Task task1 = new Task(new Action(PrintMessage));
// 2. 匿名委托
Task task2 = new Task(delegate { PrintMessage(); });
// 3. Lambda + 命名方法
Task task3 = new Task(() => PrintMessage());
// 4. Lambda + 匿名方法(最常用)
Task task4 = new Task(() => { Console.WriteLine("Hello"); });

啟動:task.Start()。或一步到位:Task.Factory.StartNew(() => ...)。

傳遞參數:Action<object>

string[] msgs = { "First", "Second", "Third" };
foreach (var msg in msgs) {
    Task t = new Task(obj => PrintMessage((string)obj), msg);
    t.Start();
}
// 必須在執行體內轉型為原始型別

取得執行結果:Task<TResult>

// 手動建立
Task<int> task = new Task<int>(() => {
    int sum = 0;
    for (int i = 0; i < 100; i++) sum += i;
    return sum;
});
task.Start();
Console.WriteLine(task.Result); // 封鎖直到完成

// Factory 一步到位
Task<int> task2 = Task.Factory.StartNew<int>(() => { ... return sum; });
Console.WriteLine(task2.Result);

TaskCreationOptions 列舉

選項說明
None預設行為
PreferFairness請求排程器公平排程
LongRunning提示長時間執行,排程器可能建立專用執行緒
AttachedToParent建立父子任務關係,父任務等待子任務完成

補充細節

  • Task.CurrentId:執行體內取得唯一任務 ID,外部存取為 null
  • 命名空間:System.Threading.Tasks、System.Threading
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved