Я использую очередь, есть два потока. Один для Enqueue, другой для Dequeue. Которые называются соответственно производителем и потребителем. Продукция может быть неограниченной. Но мне нужно ограничить потребителей, работающих одновременно. Я читал о «Параллельной библиотеке задач» и «Параллель.Для». Но я не уверен в том, как это реализовать. Пожалуйста, посоветуй мне. Вот некоторые из сегментов коды для вас, имеющих более глубокого понимания вопросаОграничить количество пользователей для очереди, которые работают параллельно
static void Main(string[] args)
{
// The Producer code comes here
// ...
// The Consumer code comes here
Thread consumer = new Thread(new ThreadStart(PendingBookingConsumer));
consumer.Start();
}
private static void PendingBookingConsumer()
{
try
{
while (true)
{
if (pendingBookingsQueue != null && pendingBookingsQueue.Count > 0)
{
PendingBooking oPendingBooking = pendingBookingsQueue.Dequeue();
//Run the Console App
string command = @"C:\ServerAgentConsole.exe";
string args = oPendingBooking.Id + " " + oPendingBooking.ServiceAccountEmail.Trim() + " " + oPendingBooking.ServiceAccountPassword.Trim() + " " + oPendingBooking.ServiceAccountEmail.Trim()
+ " " + oPendingBooking.MailBoxOwnerEmail.Trim() + " " + oPendingBooking.Method.Trim();
Process process = new Process();
process.StartInfo.FileName = command;
process.StartInfo.Arguments = args;
process.EnableRaisingEvents = true;
process.Exited += (sender, e) =>
{
Process myProcess = (Process)sender;
Console.WriteLine("Agent for booking ID :" + myProcess.StartInfo.Arguments[0] + " Done");
};
process.Start();
Thread.Sleep(2);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Спасибо, я постараюсь это. –
Это для ограниченного * размера * коллекции, это не имеет никакого отношения к числу потребительских потоков. –
@ ХансПасант ОК. Удалит, когда получит принятый ответ. – Paparazzi