2011年7月9日 星期六

以 .NET Framework 進行平行程式設計(1)

Ref:
1. http://msdn.microsoft.com/zh-tw/library/dd235608.aspx
2. http://www.cnblogs.com/tansm/archive/2010/03/29/TaskTest.html

.NET 4.0 提供平行處理程式庫,在 System.Threading.Tasks 命名空間下,有系列類別提供便捷的方法製作平行處理與非同步作業。主要類別為
System.Threading.Tasks.Task (表示可以等候和取消的非同步作業)
System.Threading.Tasks.Task(Of TResult) (屬於可以傳回值的工作)
Factory 類別提供靜態方法,這些方法可建立和啟動工作
System.Threading.Tasks.TaskScheduler 類別提供預設執行緒排程基礎結構。
Ref 2 提供不錯的Task測試範例
1. a,b,c,d 四個工作
2. c等待 a,b 完成,開始執行
3. d等待 a完成, 開始執行
4-1. Add using System.Threading.Tasks;
4-2 建立 TestAction類別
a. 建構元建立工作名稱與延遲時間
b. Do 方法輸出開始、等待延遲、輸出完畢
public class TestAction
{
public TestAction(string actionName, int p)
{
_actionName = actionName;
_p = p;
}

private int _p;
private string _actionName;
public void Do()
{
Console.WriteLine("開始執行" + _actionName);
System.Threading.Thread.Sleep(new TimeSpan(0, 0, _p));
Console.WriteLine("執行完畢" + _actionName);
}
}
4-3 測試主程式
static void Main(string[] args)
{
TaskFactory factory = new TaskFactory();
Task a = factory.StartNew((new TestAction("A", 2)).Do);
Task b = factory.StartNew((new TestAction("B", 5)).Do);
Task c = factory.ContinueWhenAll(new Task[] { a, b }, ((preTasks) => (new TestAction("C", 1)).Do()));
Task d = factory.ContinueWhenAll(new Task[] { a }, ((preTasks) => (new TestAction("D", 1)).Do()));
Console.WriteLine("俟A,B,C,D工作完畢(C執行完畢),輸入Enter結束程式");
Console.ReadLine();
}


5. 下載

沒有留言:

張貼留言