2011-03-08 11 views
4

고정 된 수의 스레드를 TPL에 사용하도록하려면 어떻게해야합니까? 나는 MaxDegreeOfParallelism이 상한선을 설정하는 데 사용될 수 있지만 상한선을 하한선과 같게하려고합니다. 이것이 가능한가? 방법?TPL - 고정 된 수의 스레드를 TPL에 사용하도록하려면 어떻게해야합니까? 덜

나는 누군가가 =) 예를 물을 것이라고 알고 있기 때문에, 나는 이것을하고 싶다. 그리고 네, 나의 scneario를위한 최적의 방법이다. =)

편집
이 솔루션은 TaskScheduler http://social.msdn.microsoft.com/Forums/en-US/parallelextensions/thread/002ff888-6e13-4d7e-a234-1632e8a1f551

답변

6

정말로 필요한 경우 TaskScheduler을 직접 만들 수도 있지만 TaskCreationOptions.LongRunning을 사용하는 것이 가장 좋은 방법입니다.

How to: Create a Task Scheduler That Limits the Degree of Concurrency

+0

감사합니다! ... LongRunning을 들여다 봅니다. 다시보고 할 것입니다. – SFun28

+0

Parallel.ForEach에서 LongRunning을 사용하는 방법을 알아 내는데 어려움이 있습니다. 어떤 제안? – SFun28

+0

내 편집에서 링크와 함께 제기 한 링크가 속임수를 사용합니다. – SFun28

4

당신이 작업을 만들 때 TaskCreationOptions.LongRunning를 사용하여 시도 적이 사용자 정의뿐만 아니라 사용자 정의 파티션 설정이 필요? 힌트 일 뿐이지 만 도움이 될 수 있다고 생각합니다.

작업이 장기 실행, 대단위 작업으로 지정됩니다. 그것은 초과 구독이 보장 될 수 있다는 TaskScheduler에게 힌트를 제공합니다.

그것은 그 과정의 MaxDegreeOfParallelism을 넘어 그것을 을 초과 할당 할 가능성이 있습니다 ... 당신은 아마 자세하게 설명 자원을 찾기 위해 시도해야합니다. 그런데 어떻게 당신이 당신의 작업을 만들고 있습니까?

+0

안녕 존 - 좋은 제안! 그것이 초과 수용 될 것인지를 더 깊게 파헤쳐 볼 것입니다. Parallel.ForEach를 통해 작업을 생성하고 있습니다. – SFun28

+0

은 @BrandonAGr에 의견을 게시했습니다. Parallel.ForEach에서 LongRunning을 사용하는 방법을 찾는 데 문제가 있습니다. 어떤 제안? – SFun28

+0

@ SFun28 : 흠 - 여기에 작업 생성 옵션을 지정할 수없는 것처럼 보입니다. 직접 작업을 생성하거나 자신의 작업 스케줄러 작성을 고려하십시오. –

관련 문제