5

ウォークスルー: 非同期 HTTP ハンドラーの作成を読んでいHttpContextて、ハンドラー スレッドからを渡しWaitCallback、バックグラウンド スレッドで実行される で使用していることに気付きました。のような呼び出しを行います_context.Response.Write()。非同期作業が開始された後、ハンドラー スレッドはそれを使用しないため、これは HttpContext がスレッド セーフではないという事実に違反しないと仮定して正しいでしょうか?

また、スレッド間で HTTPContext を使用すると、HttpContext とスレッドに関する良い情報が得られます。すべての HttpContext がスレッドセーフではないか、またはのようなアイテムだけResponseですか? Items読み取りモードのみの場合、複数のバックグラウンド スレッドがプロパティにアクセスできますか?

4

1 に答える 1

5

およびそのHttpContextすべてのプロパティはスレッド セーフではないため、十分に注意する必要があります。異なるスレッドから同時にデータを読み取っても害はありませんが、書き込み操作が発生していないことを確認する必要があります。それでも、Itemsプロパティが変更されていないことが確実な場合でも、コピーを作成してバックグラウンド スレッドに提供することをお勧めします。これにより意図が明確に伝わり、コード レビュー中に議論を交わしたり、このコードが本当にスレッド セーフかどうかを再評価したりする必要がなくなります。

HttpContext次に、非同期リクエストでの使用について。異なるスレッドからにアクセスするのはHttpContext危険ですが、この場合、ASP.NET がスレッドを制御し、1 つのスレッドだけが要求を処理するようにします。たとえば、実行を継続しながら、そのスレッドに(スレッド プールまたは を使用してnew Thread())新しいスレッドを手動でスピンアップする場合は異なります。and supplying HttpContext

于 2010-02-24T09:44:41.093 に答える