2009-09-23 8 views
7

스레드 풀 스레드의 CurrentCulture을 설정하면 스레드가 실행을 완료하고 스레드 풀로 다시 반환 될 때 어떤 현상이 발생합니까? CurrentCulture을 기본값으로 다시 설정합니까 (그 의미가 무엇이든) 또는 설정 한 문화권을 그대로 유지합니까?스레드 풀의 culture를 변경하면 풀로 되돌아 오는 데 영향을 줍니까?

프레임 워크가이 문제를 방지하기 위해 스레드를 기본 상태로 재설정하지만이 효과에 대한 문서를 찾을 수 없길 바랍니다. ThreadPool에 대한 MSDN 문서에서 내가 찾은 가장 가까운 : 스레드 풀 스레드를 재사용

, 이 스레드 로컬 저장소 또는 ThreadStaticAttribute 로 표시된 필드에 데이터를 삭제하지 않습니다 속성. 따라서 메서드로 스레드 로컬 저장소에 배치 된 데이터는 동일한 스레드 풀 스레드에 의해 실행되는 다른 메서드에 노출 될 수 있습니다.

이것은 반환 될 때 스레드가 이 아니고이 아닌 것으로 나타납니다.

나는 이것을 시험해보기 위해 약간의 샘플 코드를 시도했는데, 이 문화가 재설정 된 것처럼 보인다고하지만, 나는 단지 작은 하위 집합만을 사용하고 있다고 생각하므로이 동작을 올바르게 테스트하고 있다고 확신하지는 않습니다. ThreadPool의 스레드 중 하나이므로 이미 culture가 설정된 스레드를 테스트하고 있는지 확신 할 수 없습니다.

+0

는 약간 관련,하지만 주로 참조 : http://twitter.com/#!/Wintellectuals/status/27733481381 – adrianbanks

답변

8

나는 특별히 당신이 인용 한 텍스트 때문에 ThreadPool 을 재설정하는 것에 의존하지 않을 것입니다.

스레드 풀의 culture를 "변경"하는 것에 대해 걱정이된다면 스레드 작업이 완료되면 다시 설정해야합니다. 이것은 아주 간단한 작업입니다.

현재 스레드 풀이이 작업을 수행한다고 생각하지 않지만 이더라도 .NET 4 +의 ThreadPool 구현이 변경되지 않는다고 가정하는 것은 안전하지 않습니다.

+0

이 정말 이론적 인 질문에 가깝습니다. 나는 이것을하지는 않지만 새로운 쓰레드가 주 쓰레드와 다른 문화권에서 실행되는 상황을 보게된다. 스레드가 완료되면 문화를 다시 설정하는 것을 잊어 버리기가 쉽기 때문에 어떤 일이 발생했는지 궁금했습니다. – adrianbanks

+1

ThreadPool이 새 스레드를 만들면 스레드를 포함하는 AppDomain의 culture를 사용합니다. 하지만 당신은 그 스레드를 "재사용"거라면 당신은 모를, 그리고 스레드는 스레드를 은퇴 않기 때문에 꽤 많은 정의되지 않은, 예기치 않은 동작을 일으키는 -을 변경하면 BTW, 유지, 않습니다. –

+0

@ Reduce Copsey -이 경우 AppDomain의 문화를 어떻게 찾을 수 있습니까? 스레드의 문화에 대한 참조를 찾을 수 있지만 AppDomain에 대한 참조는 찾을 수 없습니다. 내가 묻는 이유는 백그라운드 작업을 만들기 위해 System.Threading.Task API를 사용하고 있으며 기본 구현이 ThreadPool을 사용한다고 생각합니다. 스폰 된 스레드는 부모 스레드에 설정 한 문화권이 아니라 기본 시스템 문화권을 가진 것처럼 보입니다. 전체 앱의 기본 문화권을 설정하는 방법을 원했지만이를 수행 할 방법을 찾지 못했습니다. –

관련 문제