0

我在 asp.net Web 应用程序中有 veeeeryyy 基本单例:

[ThreadStatic]
private static BackgroundProcessManager2 _Instance;

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

通常一切都很好,但是这次在每个页面加载时 _Instance 都是空的。

此外,当我尝试在标记为 ** 的行中观看 _Instance 时,我遇到了非常奇怪的错误:

无法获取字段“_Instance”的值,因为有关包含类的信息不可用。

什么可以让这个类上传?

4

1 回答 1

4

ThreadStatic意味着变量绑定到给定的托管线程。ASP.NET 使用线程池为用户请求提供服务。这意味着每个页面可能由不同的线程提供服务,因此您的实例变量为 null,因为每个请求都由池中的不同线程提供服务,但这是随机的,取决于许多因素。

另请注意,用户请求不必绑定到工作线程。例如,如果您使用异步页面,则页面可以在给定线程上开始处理并在另一个线程上完成。这就是为什么在 ASP.NET 应用程序中应该避免使用它的原因之一,因为它总是与用户请求相关联并且与线程无关。ThreadStaticHttpContext

于 2010-08-20T13:36:57.727 回答