程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> .NET4.0新功能:任務(Task)

.NET4.0新功能:任務(Task)

編輯:關於.NET

用過.NET線程池的程序員都知道通過調用ThreadPool類的QueueUserWorkItem 方法把要執行的代碼放入線程池去執行。由於.NET FCL的強大,使得這個操作極 其簡便。但使用線程池有個明顯的不足之處,那就是我們無法獲取線程池執行方 法的返回值,因為WaitCallback委托的返回值為void。注:WaitCallback委托的 原型為:public delegate void WaitCallback(Object state)。

比如,我們有個方法代碼是這樣的:

public int Sum()
{
     //此方法模擬一個耗時操作
     int sum = 0;
     for (int num = 1; num <= 100; num++)
     {
        Thread.Sleep(5);
        sum += num;
     }
     return sum;
}

假如這個方法可以加入線程池中去執行(實際上不能,因為不匹配 WaitCallback委托),但我們也無法獲取執行的結果。隨著.NET4.0的發布,這個 問題得到了解決,.NET 4.0提供了一個新功能,叫任務(Task),在 System.Threading.Task命名空間下,有個Task類及其泛型版本 Task<TResult>。我們可以把這個方法添加到任務,並可以獲得執行結果, 示意代碼如下:

using System;
using System.Threading;
using System.Threading.Tasks;
namespace TaskDemo
{
     class Program
     {
         static void Main(string[] args)
         {
             Task<int> task = new  Task<int>(() => Sum());//新建任務實例
             task.Start();//開始任務
             Console.WriteLine("任務已開始");
             task.Wait();//等待任務執行完成
             Console.WriteLine(task.Result);
         }
      //此方法模擬一個耗時操作
         static int Sum()
         {
             Console.WriteLine("任務正在執行");
             int sum = 0;
             for (int num = 1; num <= 100;  num++)
             {
                 Thread.Sleep(5);
                 sum += num;
             }
             return sum;
         }
     }
}

任務(Task)確實是個好東東!這裡只對任務(Task)作個初步的介紹。由於我 也只是剛接觸,感覺這是個非常有用的功能,於是忍不住就寫出來了,由於筆者 水平有限,不足之處還望高手指點。

最後,非常感謝Jeffrey Richter給我們帶來的驚喜--《CLR via C#, Third Edition》。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved