2010年6月1日 星期二

TPL 學習日記(1): Start new task

這次要學習 TPL 了. (Task Parallel Library)。當然,還是從最簡單的開始學起。

範例1

static void Main(string[] args)
{
  Task.Factory.StartNew(() => {
    int sum = 0;
    for (int i = 0; i < 100; i++) sum += i;
    Console.WriteLine("總和為{0}",sum);
  });
  Console.WriteLine("完成");
  Console.ReadLine();
}

執行結果

image

這是最簡單的範例了。

Task.Factory.StartNew 起始一個新的 Task 並且開始執行。在大括弧內的為 Task 要執行的程式內容。由於 該 Task 尚未執行完畢,主程式就執行了 Console.WriteLine(“完成”) 故先輸出完成。我們尚未按Enter 時Task 就執行完了,故再輸出 總和為4950。

範例2

這個範例的目的同上一個,只是這次我們想要自行決定 task 何時開始執行。

static void Main(string[] args)
{
  Task task1 = new Task(() =>
  {
    int sum = 0;
    for (int i = 0; i < 100; i++) sum += i;
    Console.WriteLine("總和為{0}", sum);
  });
  task1.Start();
  Console.WriteLine("完成");
  Console.ReadLine();
}

範例3

上述的範例都是在 task 內輸出結果。這次我們想要由  task 內得到結果,但在主程式內輸出。

static void Main(string[] args)
{
  Task<int> task1 = new Task<int>(() =>
  {
    int sum = 0;
    for (int i = 0; i < 100; i++) sum += i;
    return sum;
  });
  task1.Start();
  Console.WriteLine("總和為{0}", task1.Result);
  Console.ReadLine();
}
Task<int> 的<int> 代表回傳值的型別,其結果由 Task.Result 來讀取。

沒有留言:

Share with Facebook