2017-01-21 7 views
1

Пример: как я могу сохранить 10 потоков, работающих до конца, если один или несколько потоков завершены, выполните другую задачу, все еще закончите все задачи. за работой.ЗАДАЧА: Сохраняйте работу с некоторыми потоками, получайте данные от Datagridview

//While(index2<dataGridView.RowCount)  

    for (int i=0;i<10;i++)//keep 10 thread working 

      // t[index2] = new Task(() => 
       { 

        // startLink(index2); 

       }); 
      // t[index2].Start(); 
      // t[index2].Wait() 

//index2++; //dataGridView.Row number 
+0

Кто может дать мне идею? – BOB

+1

Если бы я просто мог понять, что вы пытаюсь выполнить .. Не могли бы вы объяснить немного больше? –

+0

спасибо peter, например: у меня более 1000 сайтов в (dataGridView1.Rows [index2] .Cells [0] .Value.) Я хочу получить все эти ссылки веб-сайта, использовать задачу, чтобы сохранить поток для реализации. если у меня есть 10 потоков, поток num02 завершен, тогда только 9 потоков работают. как все еще можно сохранить 10 потоков, и автоматически взять num11 из datagridview. – BOB

ответ

0

C# ограничивает количество задач, выполняемое вашей программа по количеству процессоров вашего компьютера (это не conincidence).

Вы можете камыш более об ограничении параллелизма здесь: https://msdn.microsoft.com/en-us/library/ee789351(v=vs.100).aspx

в основном вам нужно реализовать свою собственную задачу Schedular только запустить 10 задач одновременно.

Таким образом вы можете запланировать неограниченное количество задач, но TaskScheduler запускает только 10 за раз.

Вариант 2

  1. , чтобы начать 10 задач
  2. подстерегающие Любой (пока не будет сделано)
  3. расписание новой задачи. и ждите снова, пока не будет сделано.

Но помните эту опцию 2. Выполняется только количество заданий как количество процессоров, которые у вас есть. Поскольку это задание по умолчанию, выполняются запланированные задачи. (Вы на самом деле запланировать задачу всякий раз, когда вы говорите Tas.Run(...) вместо прямого запуска.

Большие задачи

Если у вас есть большие задачи и 1 нить уже завершена перед остальными (я прочитал из комментариев). Затем разделите ваши большие задачи сводятся к небольшим задачам (или создавайте новые задачи внутри задачи). Затем эти новые задачи будут запланированы и пройдут по всем задачам.