2012-05-03 6 views
1

System.Data.SQLite 위에 라이브러리를 작성하고 Parallel.ForEach을 사용할 때 (내 라이브러리)에 예기치 않은 동작이 있음을 알았습니다. 나는 결국 이것을 디버깅 할 수있다. (예를 들어 시간을 가져 오거나 가져 가면) 오른쪽 부분을 잠글 가능성이있다.하지만 지금은 Parallel.ForEach의 사용을 막고 싶다. 또는 내 라이브러리의 사용을 허용한다.) 단 하나의 스레드, 어떻게 진행하겠습니까?Parallel.ForEach의 사용 금지 또는 금지

답변

5

외부 코드로 API를 사용하는 방법을 제어 할 수 없습니다. 그것이 릴리스 이전에 절대적으로 언급 할 수없는 것이라면, 문서의 실패 사례 (XML 주석 및 모든 종류의 "도움말 파일")에 대해 매우 명확하게 밝히는 것이 좋습니다.

+2

'Parallel.ForEach' (et al.)가 시한 폭탄을 쳤다는 사실이 밝혀졌습니다. 고유 한 리소스에 대한 액세스, 선택 취소, 잠금 해제 ... – MPelletier

+0

할 일이있는 것처럼 들리겠습니다. –

+0

"수백만 개의 실이 갑자기 울부 짖으며 갑자기 침묵하는 것처럼 나는 포스에서 커다란 교란을 느꼈다." – MPelletier

3

빠른 스레드 고정 특성으로 인해 동시성 문제가 해결 될 수 있지만 이는 훨씬 더 큰 빙산의 일각의 냄새가납니다. 증상이 아니라 근본 원인을 수정하십시오.