.NET 4 Parallel を試してみた

Parallel ってのが追加されるのは、知ってたんだけど、「デブサミ 2010 【18-D-1】.NET Framework 4概要」で動いているのを初めて見たので試してみた。

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
  delegate void Normal(int start, int end);
  static void Main(string[] args)
  {
    NonParallel(); // 通常
    Parallel.For(1, 30, ParallelMethod); // Parallel
    Console.ReadKey();
  }
  private static void NonParallel()
  {
    Normal n = NormalMethod;
    n.BeginInvoke(1, 10, null, null);
    Normal n1 = NormalMethod;
    n1.BeginInvoke(10, 20, null, null);
    Normal n2 = NormalMethod;
    n2.BeginInvoke(20, 30, null, null);
  }
  private static void NormalMethod(int start, int end)
  {
    for (int index = start; index < end; index++)
    {
      Console.WriteLine("Thread ID:{0} Index:{1}", Thread.CurrentThread.ManagedThreadId, index);
    }
  }
  private static void ParallelMethod(int index)
  {
    Console.WriteLine("Thread ID:{0} Index:{1}", Thread.CurrentThread.ManagedThreadId, index);
  }
}

Parallel を使用しない場合は、デリゲート の BeginInvoke でマルチスレッドっぽくしてみた。
実行結果

通常 Parallel


Parallel を使った方が実行結果がばらけてる、それとスレッドを何個使うのか不明。数字を増やすと使うスレッド数も増えてた。規則性があるのかな?