質問: async awaitの使い方について質問があります。 今まで以下のように ``` public async Task Test() { await testAsync(); } ``` とするとawaitの実行で別スレッドが生成されて非同期処理ができると思っていたのですが、以下のサイトでは ``` await Task.Run(()=> ``` というように、非同期処理を行う際はTask.Runを走らせています。 [C#]ざっくりマルチスレッド(非同期処理) 非同期処理を行うにはawaitだけではダメで、await Task.Runというように書かなければいけないのでしょうか? 認識が間違っているかもと思ったので、どなたか教えていただきたいです。よろしくお願いします。
回答: await の対象が非同期メソッドであれば await AsyncMethod(); ですが同期メソッドなら await Task.Run(() => SyncMethod()); になります。 また非同期タスクは別スレッドになるとは限りません。そのあたりは調べればいくらでも資料がでてきますが、別スレッドだと思いこんでいたら壺にはまることがあります。 それと await は別スレッドを作る働きではなく、現在(呼び出し側)の非同期タスクを一時中断して呼び出し先タスクの終了を待ちます。 中断と言ってもスレッドを停止するのではなく、一度メソッドを終了させ、呼び出し先のタスク終了後に続きを実行するように予約します。