投稿者 ツェナー  (社会人) 投稿日時 2023/11/16 11:20:14
現在、仕事において自社で使用しているアプリケーションのコードの学習を行っています。
クラスのメソッドとして、非同期メソッドが出てくるのですが、いまいち動作が分かりません。

Public Class ClassManager
Inherits ClassSingleton(Of ClassManager)
Implements IDisposable

        '(省略) 

        Private Async Function MainAsync() As Task
                  Dim ret As Task = Task.Run(Sub()
                                  
                                                    '(省略) 
                                           
                                             End Sub)
                  Await ret.ConfigureAwait(False)
        End Function

        '(省略) 

End Class

このようなプログラムがあったとき、動作の流れとして、
・呼び出し元でクラスをインスタンス化して、MainAsync()を呼ぶ
・MainAsyncはタスクを生成してそのタスクを別スレッドに移す(Dim ret As Task = Task.Run(Sub()の部分)
・元々のスレッドでは、タスクを別のスレッドに移したため、タスクより下のコードを実行しようとして、Awaitに到達する。Awaitがあるので、別スレッドで動いているタスクの終了を待つ
ということになるのかと思うのですが、
では元々のスレッドはAwaitしている間は何をしているのか、呼び出し元のコードを実行しているのか?
という点がわかりません。
ちなみに、このメソッドを呼び出している部分を見たところ、
Private ReadOnly _taskMain As Task = MainAsync()
       
        '(省略) 

_taskMain.Wait()

となっていました。

よろしくお願いいたします。