2013-05-04 4 views
1

У меня есть список ниток я хочу, чтобы обеспечить порядок выполнения между ними это кодThread порядок выполнения в C#

for (int k = 0; k < RadioList.Count; k++) 
{          
    for (int i = 0; i < filePaths.Count(); i++) 
    { 
     Thread t = new Thread(delegate() 
     {         
      Thread_Encde_function(TempRadio.PublishPoint, filePaths[i], encodingtype); 
     }); 
     t.Start(); 
     Thread.Sleep(1000); 
    } 
} 

Я хочу знать, если thread.join() может сделать эту работу.

+1

Что вы подразумеваете под «гарантией исполнения заказа»? Можете ли вы объяснить больше? –

+1

Если вам нужно гарантировать выполнение заказа, почему бы не просто выполнить функцию синхронно? Если вы беспокоитесь о блокировке потока пользовательского интерфейса, вы можете выполнить их все в одном фоновом потоке. –

+2

Нет, 'Thread.Join()' не будет выполнять эту работу. Взгляните на [MSDN: Синхронизация потоков] (http://msdn.microsoft.com/en-us/library/ms173179 (v = vs.100) .aspx). –

ответ

8

Если ваши задачи могут выполняться асинхронно (не в порядке), тогда соответствующие потоки. Однако, если у вас есть несколько задач, которые вы хотите выполнить в порядке (строго один за другим), зачем использовать потоки? Вы должны просто выполнить их в цикле for, поскольку они не могут быть распараллелены. Используя Thread.Join, чтобы дождаться потока сразу после его запуска, это будет трюк, но в этом случае вам придется подождать, пока задача не будет закончена, прежде чем запускать следующую, эффективно выполнив их по порядку.

Однако, если у вас есть части задач, которые могут выполняться одновременно, и другие части, которые должны быть последовательными, вы можете взглянуть на C# Task Parallel Library, это делает так легко.

+0

ok как указано, я могу зациклировать их в одном потоке, а затем поместить соединение, чтобы подождать, пока оно не закончится, потому что я буду повторять эту функцию много раз, как если бы я поместил новые значения в пути к файлам атрибутов и должен дождаться, пока первая группа файлы, подлежащие кодировке – 7addan

+0

@ 7addan Пожалуйста, ознакомьтесь с базовой концепцией асинхронного выполнения, потоков, задач и т. д. В Интернете есть много ресурсов. Если у вас есть задачи, которые приходят откуда-то, и вам нужно что-то обрабатывать по мере их поступления, пожалуйста, посмотрите шаблон производителя-потребителя. В C# это легко реализовать с помощью BlockingCollection и одного отдельного потока. –

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