문제

그래서 여기에서 발췌한 하나의 클래스:

    [ThreadStatic]
    readonly static private AccountManager _instance = new AccountManager();

    private AccountManager()
    {
    }

    static public AccountManager Instance
    {
        get { return _instance; }
    }

당신이 볼 수있는,그것의 단일-per-thread-즉인스턴스가 표시 ThreadStatic 특성이 있습니다.인스턴스는 또한 인스턴스의 일부분으로 정적 건축.

그래서 되는 경우,어떻게 가능하려 든에 나 ASP.NET MVC 응용 프로그램을 사용하려고 할 때 인스턴스설턴트를 제공합니다.

도움이 되었습니까?

해결책

인용 MSDN ThreadStaticAttribute:

클래스 생성자가 실행될 때 이러한 초기화는 한 번만 발생하므로 하나의 스레드에만 영향을 미치기 때문에 ThreadStaticAttribute가 표시된 필드의 초기 값을 지정하지 마십시오. 초기 값을 지정하지 않으면 값 유형 인 경우 기본값으로 초기화되는 필드에 의존하거나 참조 유형 인 경우 NULL 참조 (Visual Basic에서는 없음)에 의존 할 수 있습니다.

다른 팁

이네스 골프 클럽 및 파리 르 부르제의 ThreadStatic 특성이 있습니다.비록 그것은 값을 만듭니다 당사의 initalization 코드는 실행에서 하나의 스레드입니다.의 모든 다른 스레드에는 이 값이 기본 유형에 대한 대신의 결과 초기화 코드입니다.

대신 값을 초기화,감싸는 속성을 초기화한다.

[ThreadStatic]
readonly static private AccountManager _instance;

private AccountManager()
{
}

static public AccountManager Instance
{
  get 
  { 
    if ( _instance == null ) _instance = new AccountManager();
    return _instance; 
  }
}

기 때문에 값 _instance 는 독특한 스레드당,잠금 해안에 필요한 제공하고 처리할 수 있습 같은 다른 어떤 느리게 초기화 값입니다.

당신은 고전을 쳤다 [ThreadStatic] "101"여기.

정적 이니셜 라이저는 한 번만 발사됩니다. ~ 일지라도 표시됩니다 [ThreadStatic], 따라서 다른 스레드 (첫 번째 스레드를 제외하고)는 이것을 초기화되지 않은 것으로 보게됩니다.

일어나고있는 일은 정적 필드가 한 번만 초기화되므로 다른 스레드가 필드를 읽으려고 할 때 _instance가 다시 초기화 될 수 없기 때문에 (기본값이기 때문에) NULL이됩니다. 그것은 단지 생각이지만 나는 완전히 벗어날 수 있지만 그것이 내가 생각하는 일입니다.

ThreadStaticAttribute가 표시된 정적 필드는 스레드간에 공유되지 않습니다. 각 실행 스레드에는 분리 된 인스턴스의 필드가 있으며 독립적으로 해당 필드의 값을 설정하고 가져옵니다. 필드가 다른 스레드에서 액세스되면 다른 값이 포함됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top