【发布时间】:2014-05-06 11:44:31
【问题描述】:
我有一个电话消息应用程序,其中有很多消息要处理。由于电话端口有限,所以消息将被处理先进先出。每条消息都有一个“确认”标志,指示处理的是哪个消息。它当然被初始化为假。
我想将所有消息放入一个队列,然后用多个线程或任务处理它们。
public class MessageQueue
{
public Queue MessageWorkItem { get; set; }
public Messages Message { get; set; }
public MessageQueue()
{
MessageWorkItem = new Queue();
Message = new Messages();
}
public void GetMessageMetaData()
{
try
{
// It is just a test, add only one item into the queue
Message.MessageID = Guid.NewGuid();
Message.NumberToCall = "1111111111";
Message.FacilityID = "3333";
Message.NumberToDial = "2222222222";
Message.CountryCode = "1";
Message.Acknowledge = false;
}
catch (Exception ex)
{
}
}
public void AddingItemToQueue()
{
GetMessageMetaData();
if (!Message.Acknowledge)
{
lock (MessageWorkItem)
{
MessageWorkItem.Enqueue(Message);
}
}
}
}
public class Messages
{
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; }
}
现在我的问题是如何使用多线程从队列中取出项目。 对于队列中的每一项,我都想运行一个脚本。
public void RunScript(Message item)
{
try
{
PlayMessage(item);
return;
}
catch (HangupException hex)
{
Log.WriteWithId("Caller Hungup!", hex.Message);
}
catch (Exception ex)
{
Log.WriteException(ex, "Unexpected exception: {0}");
}
}
我的想法是看看
if(MessageWorkItem.Count >= 1) 然后做点什么,但我确实需要代码帮助。
【问题讨论】:
-
查看生产者/消费者模式(问题)并彻底重组你的类。注意命名。
-
你正在使用哪个版本的框架
-
@@K.B、.NET 4 或 .NET 4.5。哪个都好。
标签: c# multithreading task-parallel-library