안녕하세요 _noOfThreads
은 한 번에 정의 된 작업으로 실행됩니다. 그래서 나는 계속연산자를 사용하여 작업을 계속하고 있으며 루프의 끝에는 Tasks.WaitAll
이 있습니다. 이것은 코드 단편입니다.Task.WaitAll은 하위 작업을 기다리지 않습니까?
for (int index = 0; index < count; index++)
{
if (index < _noOfThreads)
tasks[index] = Task.Factory.StartNew(somedelegate);
else
tasks[index % _noOfThreads].ContinueWith(task => { foo.bar(); },
TaskContinuationOptions.AttachedToParent);
}
Task.WaitAll(tasks);
그러나 하위 작업이 완료 될 때까지 기다리지 않습니다. 상위 작업이 완료 되 자마자 Task.WaitAll
다음 줄이 실행됩니다. 하위 작업도 대기하도록이 코드를 어떻게 변경합니까?
Tasks[] tasks = new Task[ _noOfThreads];
가 될 코드를 변경
:
[Task.Continue가 예상했던대로 작동하지 않음] (http://stackoverflow.com/questions/6997480/task-continuewith-not-working-how-i-expected) – mellamokb
사이드 노트에서 당신이 여기서하는 일은 작업 스케줄링을 결정하는 것입니다. 일정을 사용자 지정하려는 경우 [TaskScheduler] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskscheduler.aspx)에서 파생되는 것을 볼 수 있습니다. 즉, 기본 스케줄러는 이미 많은 수의 작업이 대기중인 경우 스레드로 시스템에 과부하가 걸리지 않도록 매우 잘 수행합니다. –
@ Dan : 그건 내 관심사가 아닙니다. 나는 이것을 TaskScheduler에게주고 싶지 않다. 변수가 있고 그 변수만큼만 Tasks를 시작하고 싶습니다. 즉, 세마포어 (semaphore)와 같은 것을 시뮬레이트하기를 원합니다. 세마포어 (semaphore)는 쓰레드의 수를 정의하고 그 수의 쓰레드 만이 특정 시간에 그 코드를 입력 할 수 있습니다. –