1
1回のリクエストでスレッド静的な変数を使用する可能性はありますか?現在のコードでは、スレッドの静的変数をロギングに使用しています。新しいスレッドが開かれたときに変数がnullになるため、非同期コントローラメソッド(asyncおよびawaitパターン)を使用して問題が発生します。非同期ASP.NET Web APIのThreadStatic
1回のリクエストでスレッド静的な変数を使用する可能性はありますか?現在のコードでは、スレッドの静的変数をロギングに使用しています。新しいスレッドが開かれたときに変数がnullになるため、非同期コントローラメソッド(asyncおよびawaitパターン)を使用して問題が発生します。非同期ASP.NET Web APIのThreadStatic
await
はスレッドのジャンプを引き起こす可能性があるため、スレッドの静的変数は当然問題を引き起こします。
この問題を回避するには、AsyncLocal<T>
(.NET 4.6で使用可能)または(必要な場合)HttpContext.Current.Items
のいずれかを使用できます。その2つのうち、Items
(あなたのプラットフォームで利用可能な場合)の上にAsyncLocal<T>
を必ずお勧めします。