Parallel.For メソッドの挙動

.NET Framework 4 で追加されたタスク並列ライブラリ (TPL) の Parallel.For メソッドは、
従来の BeginInvoke メソッドなどとは異なり、呼び出し元のスレッドをブロックします。
 
簡単な内容ですが、今回はこの事実を確かめてみることにします。
C# で次のようなコンソール アプリケーションを作成しました。
各スレッドでは 1 秒間だけ待機させます。

static void Main()
{
    WriteLog("開始");

    Parallel.For(0, 10, (i) =>
    {
        Thread.Sleep(1000);

        WriteLog(i + " 番目のスレッド終了");
    });

    WriteLog("終了");
}

static void WriteLog(string message)
{
    Console.WriteLine("{0:HH:mm:ss.fff}: {1}", DateTime.Now, message);
}


 
このプログラムを実行すると、コマンドライン上に次のように出力されました。
16:45:23.638: 開始
16:45:24.649: 0 番目のスレッド終了
16:45:24.649: 5 番目のスレッド終了
16:45:25.360: 1 番目のスレッド終了
16:45:25.651: 2 番目のスレッド終了
16:45:25.651: 6 番目のスレッド終了
16:45:26.362: 4 番目のスレッド終了
16:45:26.652: 3 番目のスレッド終了
16:45:26.652: 7 番目のスレッド終了
16:45:26.863: 8 番目のスレッド終了
16:45:27.363: 9 番目のスレッド終了
16:45:27.363: 終了
この結果により、Parallel.For メソッドがすべてのスレッドの終了を待機することがわかりました。
 
バージョン情報
.NET Framework 4
 
参照
カテゴリー: .NET Framework. タグ: . Leave a Comment »

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。