2013-03-26 2 views
4

나는 멀티 스레드에서 일반적인 "푸시 기능을 스레드 풀에 넣고 완료 ​​될 때까지 기다리는"방법보다 더 많은 것을 얻으 려하고있다.작업 스케줄러 (Task.Factory) 및 스레드 수 제어하기

기본적으로 스레드, 취소 토큰을 전달하는 기능, 리턴 값 가져 오기 등을 더 많이 제어하고 싶습니다.이 모든 것은 Task.factory (Task Scheduler)를 사용하여 가능합니다. 스레드 풀의 맨 위에.

그렇다면 일반 스레드 풀의 스레드 수를 제한하면 Task Scheduler를 구현할 때 또는?

또한 독자적인 스레드 풀을 사용하는 것이 스레드 풀보다 낫다는 것을 읽었습니다.이 두 스레드를 혼합하여 원하는 컨트롤을 얻을 수 있습니까?

모든 의견을 환영합니다! 좀 더 많은 사람들을 설명 할 시간을내어 주셔서 감사합니다.

답변

5

TaskScheduler that limits concurrency을 만들 수 있습니다. 이 사용자 지정 스케줄러를 사용하여 자신의 TaskFactory을 만들고 원하는 컨트롤로 사용자 지정되는 작업을 시작할 수 있습니다.

Parallel Extensions Samples 프로젝트에는 참조로 사용할 수있는 많은 사용자 지정 작업 스케줄러가 포함되어 있습니다.

가 가

내가 또한 자신의 스레드를 사용하여 스레드 풀보다 더 읽었

, 나는이 두 가지를 혼합하고 내가 원하는 컨트롤을받을 수 있나요?

저는 대부분의 일반적인 용도로이 사실에 동의하지 않습니다. .NET ThreadPool은 매우 효율적이며 고도로 최적화되어 있습니다. 사용되는 스레드의 수를 자동으로 조정하는 데 필요한 몇 가지 메트릭을 포함합니다.

사용자가 선택한 경우 항상 전용 스레드 또는 사용자의 "스레드 풀"구현을 사용하는 TaskScheduler을 만들 수 있습니다.

+0

내가 원하는 것은 - 함수가 있습니다 : int Calc (int 1, int 2) - 최대 10 개의 스레드로 100 번 수행하고 결과를 화면에 저장하고 취소 버튼이 있습니다. 케이스 전체를 취소하고 싶습니다. 더 간단한 접근법이 아닙니까? – Darko

+2

@Darko'ParallelOptions'가 설정된'Parallel.For'를 사용하십시오. http://reedcopsey.com/series/parallelism-in-net4/를 참조하십시오. –