2014-01-10 4 views
1

Я пытался сделать это:продолжать работать определенное количество задач

Create Task «N» для выполнения и продолжать работать это число TAKS в течение периода времени, в этом случае одна задача финализации , тогда я должен начать новую задачу, чтобы сохранить одинаковое количество задач.

Я не знаю, можно ли это обрабатывать с помощью TaskScheduler или мне нужно создать собственный TaskScheduler.

Другой вариант, который, как я думаю, может работать, использовать TPL DataFlow Producer-Consumer, когда задача заканчивается, а затем taskcheduler принимает новую задачу, создаваемую производителем.

Вопрос: как я могу создать новую задачу, когда кто-то закончил, чтобы сохранить одинаковое количество задач?

+0

И вопрос ...? – tnw

+0

TPL DataFlow 'ActionBlock' может иметь определенную степень параллелизма. Смысл, если вы хотите, чтобы сразу выполнялось 5 заданий ... а затем, как только один заканчивается, он схватит следующую доступную задачу для ее запуска. – Andrew

+0

Похоже, вы неправильно используете Задачи. Что вы пытаетесь достичь? – SLaks

ответ

8

Этот код будет продолжать работать numTasks Задачи параллельно.

int numTasks = 5; 
SemaphoreSlim semaphore = new SemaphoreSlim(numTasks); 
while(true) 
{ 
    semaphore.Wait(); 
    Task.Run(() => 
     { 
      DoSomething(); 
     }) 
     .ContinueWith(_ => semaphore.Release()); 
} 
+0

Да, это работает для меня потрясающе. Большое спасибо! =) – Lu1zZz

+0

@ Lu1zZz, то как насчет [принятия ответа] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)? –

0

Планировщик задач может использоваться для запуска исполняемого файла, который можно использовать для выполнения набора работ/задач. В качестве альтернативы вы можете просто создать службу Windows ...

Смежные вопросы