C# マルチスレッド(非同期)処理(Taskクラス)

マルチスレッド(非同期)処理に関しては色々なやり方があります。ThreadクラスやThreadPoolクラスを使用する方法や、デリゲートをBegininvokeする方法などがありましたが、.NET4以降ではTaskクラスを使用するのが手軽でおすすめです。

Taskクラスを使用したマルチスレッド(非同期)処理

// .NET 4.5 以降
Task.Run(() =>
{
    // なにか重たい処理
    for (int i = 0; i < int.MaxValue; i++) { }
});
 
// .NET 4.0 の場合
Task.Factory.StartNew(() =>
{
    // なにか重たい処理
    for (int i = 0; i < int.MaxValue; i++) { }
});

別スレッドの処理が終了したのを待つ必要がある場合、Runメソッドの戻り値を利用します。

// 終わるまで待つ場合
Task t = Task.Run(() =>
{
    // なにか重たい処理
    for (int i = 0; i < int.MaxValue; i++) { }
});
 
// タスクが終了するまで待つ
t.Wait();

別スレッドでハンドルされない例外が発生した場合、Waitメソッドでその例外キャッチすることができます。

// 別スレッドでハンドルされない例外があった場合
Task t = Task.Run(() =>
{
    throw new NotImplementedException();
});
 
try
{
    // Waitで例外をキャッチできる
    t.Wait();
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}
使用環境: Visual Studio 2015 .NET Framework 4.5

C# メニューリスト