リクエストで呼び出されるさまざまなサービス/リポジトリ間で共有するには、ObjectContext
を保存する必要があることを読みました。代わりにクラス変数の属性を使用するのが安全かどうか疑問に思っています。それは安全なことですか?各リクエストは独自のスレッドで処理されますか?HttpContext.Current
ObjectContext
ObjectContext
[ThreadStatic]
static
1251 次
2 に答える
8
いいえ、同じスレッドに複数のリクエストが存在する可能性があります。さらに重要なのは、1 つのリクエストが複数のスレッドで処理される可能性があることです。これはスレッド アジリティと呼ばれ、コンテキストではなくスレッド静的変数に格納すると問題が発生します。ASP.NET が同じリクエスト中にスレッド間で移動する場合、HttpContext には引き続きアクセスできますが、スレッドは-static 変数ではありません。
詳細情報へのリンク:
- CallContext と ThreadStatic (関連する質問)
- http://piers7.blogspot.com/2005/11/threadstatic-callcontext-and_02.html (詳細を含むブログ エントリ)
于 2009-11-23T18:46:00.477 に答える
3
リクエストの処理には 1 つのスレッドが使用され、既存のリクエストが完了するまで、他のリクエストはそのスレッドを使用しません。ただし、例外が発生した場合でも、コンテキスト オブジェクト内のアイテムが確実に破棄されるようにする方法を検討する必要があります。スレッドが何らかの理由でリクエストを終了すると、他のリクエストを処理するために再利用されます。前のリクエストの状態が次のリクエストに漏れることは望ましくありません。
于 2009-11-23T18:51:42.880 に答える