そのため、MSDN for ASP.Net Coreでは、ホストされたサービスを使用してバックグラウンドタスクを作成する方法を示しています。バックグラウンドキューを作成する方法を説明する特定の段落もあります。
今私の質問は、ExecuteAsync
メソッドはすでに独自のスレッドで実行されますか、それともTask.Run
最初に呼び出す必要がありますか?
う
ExecuteAsync
方法は、独自のスレッドで実行します
推定ExecuteAsync
はasync
方法です(public async Task ExecuteAsync
)
Tl; Dr it depdends
async
このスレッドをawait
編集できることを意味します。リターンのawait
結果が出るまで、メインスレッドの現在の実行をパークしasync
ます。これにより、現在のスレッドが解放されてスレッドプールに戻され、再利用されます。次に、がasync
戻ったときに(おそらく実際にこれを呼び出す方法に応じて)新しいスレッドがスレッドプールから引き出され、実行が続行されます。これはコンテキストスイッチングと呼ばれます。
このメソッドがasync
本当にそうでない場合、実際には何も起こりません。メソッドではないかのように実行されasync
ます。
このメソッドが明示的にTask
(を使用してTask.Run
)を作成する場合、async
スレッドはawait
これを行いTask
ます。したがって、タスクは新しいスレッドを使用し、async
メソッドはそのスレッドを解放し、タスクが戻ったときに新しいスレッドを取得します。コンテキストの切り替えにはコストがかかるため、これはゼロサムではありません。これが、CPUバウンドプロセスでは通常効率が低下しないため、async
IOバウンドメソッドのみを使用する必要がある理由です。
このテーマに関するStephenClearyの優れたブログを読むことをお勧めします
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加