2015-02-24 1 views
0

Я разрабатываю конвертер документов, используя winforms.C# multi threading добавить поток после завершения любой другой нити

Я хочу использовать многопоточность, чтобы конвертировать 3 документа параллельно и любое завершение преобразования документа, тогда другое преобразование документа должно начинаться как новый поток.

Я пытаюсь использовать несколько потоков, но я не могу найти, как разместить потоки в очереди.

Есть ли способ реализовать это в C#.

+1

Размещение потоков в очереди не имеет большого смысла. Попробуйте разместить задачи в очереди и на них работают потоки. – Peter

+1

Вы можете использовать threadpools –

+0

, вы должны использовать threadpools и позволить менеджеру пула потоков заботиться об управлении потоками или использовать библиотеку Task/Parallel для большего контроля, но, честно говоря, я думаю, что threadpool будет работать как можно лучше в соответствии с вашими требованиями. –

ответ

3

Я использовал бы Task s для этого. Много информации можно найти в MSDN Task Parallelism.

В простейшей форме вы создаете объекты задачи и запускаете их, после чего вы можете использовать Task.WhenAny(), чтобы проверить, закончен ли какой-либо из них и запустить больше. В конце вы можете использовать Task.WhenAll(), чтобы увидеть, когда все задачи завершены.

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

2

Как я понял, вы ищете способ обработки нескольких документов параллельно с ограниченным параллелизмом. Для этой цели вы можете использовать класс Parallel.

ParallelOptions options=new ParallelOptions { MaxDegreeOfParallelism=3 }; 
Parallel.ForEach(documentCollection,options,document => ConvertDocument(document));