normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

AsParallelを使ってみる

せっかく.NET4.0 betaが入っているので、ついついAsParallelを使ってみるわな。
どうやら、LINQインターフェースに対して、AsParallel()を実行すると並列実行型のインターフェースにバインドされるらしい。
まずはサンプルコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        int counter = 0;
        IList<Action<int>> funList = new List<Action<int>>();
        funList.Add(num => Console.WriteLine("1{0}●", num));
        funList.Add(num => Console.WriteLine("2{0}◎", num));
        funList.Add(num => Console.WriteLine("3{0}○", num));
        funList.Add(num => Console.WriteLine("4{0}▽", num));
        funList.Add(num => Console.WriteLine("5{0}△", num));
        funList.AsParallel().ForAll(func => func(++counter));
        Console.ReadLine();
    }
}

上記を実行してふらふらと試してみたのですが、実行結果が以下の2パターン観測されます。

//結果その1
41▽
12●
24◎
35○
53△

//結果その2
11●
23◎
34○
42▽
55△

なんだろう・・・。この2パターンしか観測されなかった・・・。
以下の参考サイトで使い方を見てみましたが、まだまだ分らない事だらけだ・・・。