2009年6月18日 星期四

C# 4.0 初體驗Parallel.For

今天突然想到 VS2010和.Net 4.0都Beta了 馬上來用試一下平行運算的功能據說平行運算是.Net 4.0的重點之一 雖然這個功能早在.Net 3.5就領教過了不過在.Net 3.5這算是附加的功能但是在.Net 4.0在是Framework的基本功能
static void Main(string[] args) 
{
List list = new List();
int result = 0;
Parallel.For(1, 11, i =>
{
System.Console.WriteLine("I'm " + i);
System.Console.WriteLine("I'm in thread " + Thread.CurrentThread.ManagedThreadId);
list.Add(T(i));
result += T(i);
Thread.Sleep(2000);
});
Console.WriteLine(list.Sum());
Console.WriteLine(result);
Console.ReadLine();
}
static int T(int input)
{
int result = 1;
for (int i = 1; i <= input; i++)
{
result *= i;
}
return result;
}
輸出的結果為:
I'm 1
I'm 2
I'm in thread 4
I'm in thread 1
I'm 6
I'm in thread 3
I'm 7
I'm in thread 5
I'm 3
I'm in thread 1
I'm 8
I'm in thread 3
I'm 10
I'm in thread 6
I'm 5
I'm in thread 4
I'm 4
I'm in thread 1
I'm 9
I'm in thread 3
4037913
4037913
從thread的id我們可以看出他一共開了5個thread來從處理。
而且list與result這兩個物件的thread safe他都幫我們做掉了
平行運算就是這麼簡單

沒有留言: