2011-01-25 5 views
17

각 스레드 앞에 static 값을 저장해야하는 구성 요소가 있습니다. 이것은 ASP.NET뿐만 아니라 많은 시나리오에서 사용할 수있는 일반 구성 요소입니다.ASP.NET의 ThreadStaticAttribute

내 목표를 달성하기 위해 [ThreadStatic] 속성을 사용하려고 생각했습니다. 그것이 모든 요청은 자신의 스레드에서 호출됩니다 가정했기 때문에 그것은 ASP.NET 시나리오에서 잘 작동한다고 가정하면.

약간의 연구 후, Scott Hanselman의 this Blog Post이 ASP.NET에서 [ThreadStatic]을 사용할 때주의해야한다고 말한 후 발견되었습니다.

그러나 대부분의 의견 (게시물 아래)은 동의하지 않습니다. Scott은 요청이 항상 하나의 스레드에서 실행되며 스레드가 다른 요청에 의해 동시에 사용되지 않는다고 말했습니다. 그것은 또한 내가 믿는 것이지만 여기서 당신에 대한 의견을 갖고 싶어합니다.

답변

28

아니요, Scott 님이 맞습니다. 요청이 정확히 인 경우은 전체 기간 동안 단일 스레드에서 실행해야합니다. ASP.NET은 그 점에서 스레드 - 민첩한입니다. 스위치가 발생할 수있는 몇 가지 포인트가 있지만 정확히 일 수 있습니다. (직접 테스트했습니다.)

자세한 내용은 this blog postthis Spring forum thread을 읽어보십시오.

기본적으로 컨텍스트를 캡처하는 다른 방법을 찾아야합니다. 보기의 관련 비트는 아마도 블로그 게시물의 마지막에 있습니다.

이것은 내가 볼 수있는 한 'ThreadStatic'esque 동작에 대한 유일한 지속 옵션을 의미하기 때문에 주요 PITA입니다. ASP.Net은 HttpContext를 사용합니다. 따라서 비즈니스 객체의 경우 if (HttpContext.Current! = null) 및 System.Web 참조 (yuck) 중 하나를 사용하거나 정적 지속성을위한 일종의 공급자 모델을 제안해야합니다. 이러한 싱글 톤에 액세스하기 전에 설정이 필요합니다. 두배.

+0

추가 링크를 제공해 주셔서 감사합니다. 매우 도움이된다! – gsharp

+0

이 컨텍스트에서 ASP.NET이 스레드 주체를 처리하는 방법은 무엇입니까? 'global.asax'에서 사이트 액세스에 대해 교장을 설정하고 스레드가 변경 될 수있는 상황에서 클레임 등을 확인하는 과정에서이 교장을 사용하면 Asp.net이 교장이나 스레드 문화를 복사합니까? –

+0

@ T.S : 그렇습니다. 저는 그렇다고 생각합니다. 그러나 저는 ASP.NET 전문가가 아니므로 자세한 내용을 알지 못합니다. –

1

ASP.NET 환경에서 스레드 로컬 데이터를 사용하는 것은 확실하지 않지만 .NET 4.0에는 ThreadLocal 클래스가 제공됩니다.

+1

힌트를 보내 주셔서 감사합니다. 그 수업에 대해 몰랐어. 그러나 그것은 Jon이 말한 것과 같은 이유로 작동하지 않을 수도 있습니다. – gsharp