BackgroundServiceは常に新しいスレッドで実行されますか

20

そのためMSDN for ASP.Net Coreでは、ホストされたサービスを使用してバックグラウンドタスクを作成する方法を示しています。バックグラウンドキューを作成する方法を説明する特定の段落もあります。

今私の質問は、ExecuteAsyncメソッドすでに独自のスレッドで実行されますか、それともTask.Run最初に呼び出す必要がありますか?

リアム

ExecuteAsync方法は、独自のスレッドで実行します

推定ExecuteAsyncasync方法です(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]

編集
0

コメントを追加

0

関連記事

分類Dev

ContentProvider insert()は常にUIスレッドで実行されますか?

分類Dev

BroadcastReceiver.onReceiveは常にUIスレッドで実行されますか?

分類Dev

NSURLSession dataTaskWithRequest完了ブロックは常にメインスレッドで実行されていますか?

分類Dev

させてください!/します!常に新しいスレッドで非同期オブジェクトを実行しますか?

分類Dev

paho mqttのon_messageは新しいスレッドで実行されますか?

分類Dev

新しいCompletableFuture()に登録されたコールバックはどのスレッドで実行されますか?

分類Dev

c#MVCは常にスレッドを実行していますか?

分類Dev

ConfigureAwait(false)-継続は常に異なるスレッドで実行されますか?

分類Dev

完了ハンドラクロージャは常にバックグラウンドスレッドで実行されていますか?

分類Dev

Windowsインストーラー(WiX)が常にアップグレードまたは新規インストールを実行していると見なすにはどうすればよいですか?

分類Dev

c#5.0では、「async / await」関数は実行開始時に常にメインスレッドで実行されますか

分類Dev

Xcodeが常に「xxxはすでに実行されています。停止をクリックして新しいインスタンスを終了して起動します」と表示されるのはなぜですか?

分類Dev

スレッドは常に実行されており、停止できません

分類Dev

rxJava2 Single.Just()は常にメインスレッドで実行されます。別のスレッドで実行させる方法は?

分類Dev

pthread-joinを呼び出さずに新しいスレッドの実行を開始するにはどうすればよいですか?

分類Dev

TransactionAttributeType.REQUIRES_NEWアノテーション付きメソッドは新しいスレッドで実行されますか?

分類Dev

GlobalScope.launchは新しいスレッドを作成しますか、それとも同じスレッドで実行しますか?

分類Dev

GraphQL#executeはすべてのDataFetcherを同じスレッドで実行しますか?非同期動作はDataFetcher実装に委任されていますか?

分類Dev

関数を新しいスレッドで「あたかも」実行せずに実行するにはどうすればよいですか?

分類Dev

MustHaveHappened アサートは、別のスレッド (Task.Run) で実行される非同期メソッドに対して常に失敗します。

分類Dev

エミュレータは常にバックグラウンドで実行されています

分類Dev

サブプロセスは常に低い整合性レベルで実行されていますか?

分類Dev

Bash で実行される新しいプロセスはどのようにして常に同じ環境変数を持ちますか?

分類Dev

新しいブロックデバイスは常に/ devディレクトリに表示されますか?

分類Dev

これは、NSTimerがメインスレッドで実行されるのに正しいですか?

分類Dev

すでに実行されているスレッドを停止します

分類Dev

Device.StartTimeは別のスレッドまたはUIスレッドで実行されていますか?

分類Dev

AnimationTimerは独自のスレッドで実行されていますか?

分類Dev

TaskScheduler.Defaultは、タスクがプールスレッドで実行されることを常に保証するわけではありませんか?

Related 関連記事

  1. 1

    ContentProvider insert()は常にUIスレッドで実行されますか?

  2. 2

    BroadcastReceiver.onReceiveは常にUIスレッドで実行されますか?

  3. 3

    NSURLSession dataTaskWithRequest完了ブロックは常にメインスレッドで実行されていますか?

  4. 4

    させてください!/します!常に新しいスレッドで非同期オブジェクトを実行しますか?

  5. 5

    paho mqttのon_messageは新しいスレッドで実行されますか?

  6. 6

    新しいCompletableFuture()に登録されたコールバックはどのスレッドで実行されますか?

  7. 7

    c#MVCは常にスレッドを実行していますか?

  8. 8

    ConfigureAwait(false)-継続は常に異なるスレッドで実行されますか?

  9. 9

    完了ハンドラクロージャは常にバックグラウンドスレッドで実行されていますか?

  10. 10

    Windowsインストーラー(WiX)が常にアップグレードまたは新規インストールを実行していると見なすにはどうすればよいですか?

  11. 11

    c#5.0では、「async / await」関数は実行開始時に常にメインスレッドで実行されますか

  12. 12

    Xcodeが常に「xxxはすでに実行されています。停止をクリックして新しいインスタンスを終了して起動します」と表示されるのはなぜですか?

  13. 13

    スレッドは常に実行されており、停止できません

  14. 14

    rxJava2 Single.Just()は常にメインスレッドで実行されます。別のスレッドで実行させる方法は?

  15. 15

    pthread-joinを呼び出さずに新しいスレッドの実行を開始するにはどうすればよいですか?

  16. 16

    TransactionAttributeType.REQUIRES_NEWアノテーション付きメソッドは新しいスレッドで実行されますか?

  17. 17

    GlobalScope.launchは新しいスレッドを作成しますか、それとも同じスレッドで実行しますか?

  18. 18

    GraphQL#executeはすべてのDataFetcherを同じスレッドで実行しますか?非同期動作はDataFetcher実装に委任されていますか?

  19. 19

    関数を新しいスレッドで「あたかも」実行せずに実行するにはどうすればよいですか?

  20. 20

    MustHaveHappened アサートは、別のスレッド (Task.Run) で実行される非同期メソッドに対して常に失敗します。

  21. 21

    エミュレータは常にバックグラウンドで実行されています

  22. 22

    サブプロセスは常に低い整合性レベルで実行されていますか?

  23. 23

    Bash で実行される新しいプロセスはどのようにして常に同じ環境変数を持ちますか?

  24. 24

    新しいブロックデバイスは常に/ devディレクトリに表示されますか?

  25. 25

    これは、NSTimerがメインスレッドで実行されるのに正しいですか?

  26. 26

    すでに実行されているスレッドを停止します

  27. 27

    Device.StartTimeは別のスレッドまたはUIスレッドで実行されていますか?

  28. 28

    AnimationTimerは独自のスレッドで実行されていますか?

  29. 29

    TaskScheduler.Defaultは、タスクがプールスレッドで実行されることを常に保証するわけではありませんか?

ホットタグ

アーカイブ