{ return HeavyMethod(); }); // ResultプロパティでTaskの完了まで待機してから結果を返す string result = task.Result; Console.WriteLine(result); // resultにちゃんと結果が入ってる} static string HeavyMethod(){ Console.WriteLine("HeavyMethod Start"); Thread.Sleep(5000); Console.WriteLine("HeavyMethod End"); return "hoge";} この場合、HeavyMethod StartHeavyMethod Endhogeという出力結果になる。async/awaitasync/awaitとは、同期処理を書くような感覚で非同期処理を書くことができる魔法の言葉。【ポイント】非同期メソッドには修飾子asyncをつけて、戻り値はTask型またはTask型のジェネリックにするasyncをつけた非同期メソッド内ではawaitを使えるawaitは戻り値がTask型のメソッドにしかつけられない(Task.Run()やTask.Delay()など)awaitをつけると、そのメソッドの処理が完了するまで待ってくれる(それより先に進まない)awaitがついたメソッドの完了を待っている間は、awaitが存在するメソッド(asyncがついたメソッド)はいったん抜ける同期メソッドと非同期メソッドの比較戻り値なし戻り値あり同期メソッドvoid Method(){ }T Method(){ return T }非同期メソッドasync Task Method(){ }async Task Method(){ return Task }「async void」はわざわざ使う必要ない。(UIのイベントハンドラ用)せっかくTask型を返して処理状況が確認できるようになっているので、使っておけば良い。awaitをつけるか否か「Task.Run(処理)」は、「この処理誰かやっといて!(自分はもとの作業をやる)」「await Task.Run(処理)」は、「この処理やるから終わるまでちょっと待って!」Unityで使うにはTask、async/awaitはUnityだと「.NET4.x」にすれば使える。(PlayerSettingsのOtherSettings内で指定するところがある)まとめ非同期処理難しいですね。明日はUniRxの勉強をしたい気持ちですが、実家に帰るので時間が取れるか微妙。"> await アーカイブ – ゆーじのUnity開発日記

タグ: await の記事一覧