質問:
シングルスレッドのコンソール アプリケーションでは、どのように実行するかスレッドが task.Wait() によってロックされているため、await キーワードの後のコードを実行できますか?新しいスレッドが引き継ぐのでしょうか、それともメインスレッドが何らかの方法で task.Wait() を離れて後续代码を実行するのでしょうか?
答え:
実行メカニズム:
次のような非同期メソッドで await キーワードが見つかった場合MyAsyncMethod() の場合、メソッド内の残りのコードは継続とみなされます。 await キーワードは、保留中のタスク (MyOtherAsyncMethod() など) が完了するまでメソッドの実行を効果的に一時停止します。
スレッドの継続:
デフォルトでは、非同期メソッドは、await キーワードの前のコードと同じ同期コンテキストで実行されます。 UI アプリケーションの場合、これは、await 後のコードがメイン UI スレッドで実行されることを意味します。
シングルスレッド アプリのシナリオ:
ただし、シングルスレッドのコンソール アプリケーションでは、task.Wait() を呼び出すとメイン スレッドの実行がブロックされます。したがって、スレッドが事実上ロックされているため、await 後の継続コードは実行できません。
解決策:
シングル スレッド アプリケーションで継続コードを実行できるようにするには、次のようにします。 2 つのオプションがあります:
以上がシングルスレッドアプリケーションで「await」後にコードの実行はどのように再開されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。