C# Task.Run()で時間の掛かる処理を別スレッドで実行させる
今更備忘録シリーズ第x段
ということで、Task.Run()で時間の掛かる処理を別スレッドで実行させるコード。
意外と分かりにくい(そうでもないかも)のは、別スレッドで実行させた処理が完了していなくても、
Task.Run()以降の行も(完了を待たずに)実行されるという話。
以下、簡単なサンプル
using System; using System.Threading.Tasks; using System.Threading; namespace Sample1 { public class SampleClassA { public void ProcessA() { Task<bool> task = Task.Run(() => HeavyMethod()); // 別スレッドで重いメソッドを実行するが Console.WriteLine(task.Status.ToString()); // await指定やResultアクセスがない場合はすぐ次の行が実行される // ここでは WaitingToRun bool b = task.Result; // TaskのResult(この場合bool値)を取得しようとすると、別スレッドの実行が終了するまでここで待つ Console.WriteLine(task.Status.ToString()); // ここでは RanToCompletion } private bool HeavyMethod() { Thread.Sleep(3000); // 重い処理 return true; } } }