0

私はasp.netWebアプリケーションにveeeryyy基本シングルトンを持っています:

[ThreadStatic]
private static BackgroundProcessManager2 _Instance;

public static BackgroundProcessManager2 Instance
{
     get 
     {
          if (_Instance == null) // **
          {
               _Instance = new BackgroundProcessManager2();
          }
          return _Instance; 
     }
}

通常、すべてが正常ですが、今回はすべてのページで_Instanceがnullになります。

さらに、**とマークされた行の_Instanceを監視しようとすると、非常に奇妙なエラーが発生します。

含まれているクラスに関する情報が利用できないため、フィールド'_Instance'の値をフェッチできません。

このクラスをアップロードするために何を引き起こすことができますか?

4

1 に答える 1

4

ThreadStatic変数が特定の管理対象スレッドに関連付けられていることを意味します。ASP.NETは、スレッドのプールを使用してユーザー要求を処理します。これは、各ページが異なるスレッドから提供される可能性があることを意味します。したがって、各リクエストはプールの異なるスレッドから提供されるため、インスタンス変数はnullになりますが、これはランダムであり、多くの要因に依存します。

また、ユーザーリクエストはワーカースレッドに関連付けられている必要はないことに注意してください。たとえば、非同期ページを使用している場合、ページは特定のスレッドで処理を開始し、別のスレッドで終了する可能性があります。これが、ASP.NETアプリケーションで回避する必要がある理由の1つです。このアプリケーションは、常にユーザーリクエストに関連付けられており、スレッドに依存しないため、優先する必要があります。ThreadStaticHttpContext

于 2010-08-20T13:36:57.727 に答える