更新 : 2007 年 11 月
TypeName |
DoNotTreatFibersAsThreads |
CheckId |
CA2003 |
カテゴリ |
Microsoft.Reliability |
互換性に影響する変更点 |
なし |
原因
マネージ スレッドが Win32 スレッドとして扱われています。
規則の説明
マネージ スレッドが Win32 スレッドであるとは限りません。マネージ スレッドはファイバです。CLR は、SQL によって所有される実際のスレッドの先頭でマネージ スレッドをファイバとして実行します。これらのスレッドは、AppDomains および SQL Server プロセスのデータベースで共有されます。マネージ スレッド ローカル ストレージの使用は有効ですが、アンマネージ スレッド ローカル ストレージは使用できません。また、コードが現在の OS スレッドで再度実行されるとは限りません。これらの設定をスレッドのロケールのように変更しないでください。ロックを開始するスレッドはロックの終了も実行する必要があるので、CreateCriticalSection または CreateMutex を P/Invoke 経由で呼び出さないでください。ファイバを使用する場合はその必要はないため、Win32 クリティカル セクションおよびミューテックスは SQL では無効になります。マネージ スレッド ローカル ストレージやスレッドの現在の UI カルチャなど、System.Thread マネージ オブジェクトのほとんどの状態を安全に使用できます。ただし、モデルのプログラミング上の理由から、SQL での実行中にスレッドの現在のカルチャを変更できません。変更は新しい権限によって行われます。
違反の修正方法
スレッドの使用状況を調べて、状況に応じてコードを変更してください。
警告を抑制する状況
この規則は抑制しないでください。