WidgetProcessor라는 서비스 (서비스 계층 개체가 아닌 웹 서비스)가 있고 해당 서비스에 Process()라는 메서드가 하나만있는 경우 해당 메서드 내에서 다른 서비스 (service- 레이어 개체). 이 서비스를 WidgetValidator라고 부르 자. Parallel.ForEach 내에서 호출되는 Validate() 메소드가있다.제어 컨테이너 반전 및 스레딩/Parallel.ForEach
1) Threads safe ...가 아닌 다중 계산을 수행하는 경우 Validate 메소드를 수행하지 않으면 가정합니다.
2) WidgetValidator 객체를 삽입하는 적절한 방법은 무엇입니까? 생성자를 통해 WidgetValidator를 삽입하고 클래스 수준의 전용 변수에 할당하면 스레드 안전성이 떨어지는 것처럼 보입니다. Parallel.ForEach 내부의 WidgetValidator를 new'ing하는 것과 비교하면 훨씬 좋습니다. 그러나 이것에 관한 무엇인가는 나에게 "Code Smell"을 생각하게한다! Validate 메서드 내부의 코드에 잠금을 적용해야합니까?
참고 : 저는 IinC 컨테이너로 Ninject를 사용하고 있습니다.
메서드 로컬 변수가 변경 될 수 있습니다. 각 스레드는 자체 로컬 변수를 가져옵니다. 실례지만, 내가 스레드를 한 이후로 한동안. +1 – BuddyJoe
로컬 변수는 공유되지 않습니다. CLR은 원하는 경우 안전한 코드 방법을 제공하지 않습니다. 이것은 안전합니다. – usr
차가움. Ninject를 사용하여 DDD 프로젝트를 진행하고 있습니다 ... 그리고 스레딩을 다루어야했던 프로젝트를 오래 동안 가지고 있지 않았습니다. 감사합니다 - usr - 대답했습니다. – BuddyJoe