I have a telephony message application in which there are many many messages to be processed.Because telephone ports are limited, so the message will be processed first in f
Parallel.ForEach from TPL. It's parallel for-each.
Sample (changed MessageWorkItem to generic Queue):
public class MessageQueue
{
public Queue MessageWorkItem { get; set; }
public MessageQueue()
{
MessageWorkItem = new Queue();
}
public Message GetMessageMetaData()
{
try
{
// It is just a test, add only one item into the queue
return new Message()
{
MessageID = Guid.NewGuid(),
NumberToCall = "1111111111",
FacilityID = "3333",
NumberToDial = "2222222222",
CountryCode = "1",
Acknowledge = false
};
}
catch (Exception ex)
{
return null;
}
}
public void AddingItemToQueue()
{
var message = GetMessageMetaData();
if (!message.Acknowledge)
{
lock (MessageWorkItem)
{
MessageWorkItem.Enqueue(message);
}
}
}
}
public class Message
{
public Guid MessageID { get; set; }
public string NumberToCall { get; set; }
public string FacilityID { get; set; }
public string NumberToDial { get; set; }
public string CountryCode { get; set; }
public bool Acknowledge { get; set; }
}
class Program
{
static void Main(string[] args)
{
MessageQueue me = new MessageQueue();
for (int i = 0; i < 10000; i++)
me.AddingItemToQueue();
Console.WriteLine(me.MessageWorkItem.Count);
Parallel.ForEach(me.MessageWorkItem, RunScript);
}
static void RunScript(Message item)
{
// todo: ...
Console.WriteLine(item.MessageID);
Thread.Sleep(300);
}
}