c# – 在MultiThreading Service中监听什么是更好的方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在MultiThreading Service中监听什么是更好的方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1868字,纯文字阅读大概需要3分钟。
内容图文
![c# – 在MultiThreading Service中监听什么是更好的方法?](/upload/InfoBanner/zyjiaocheng/770/c37fd93f280a4a278d9cc8ec54c5e6bf.jpg)
我对MSMQ和.NET中的线程都相对较新.我必须创建一个服务,通过TCP和SNMP,几个网络设备以及所有这些东西在专用线程中运行,在不同的线程中监听,但是这里也需要从另一个应用程序监听MSMQ队列.
我正在分析另一个类似的项目,并使用下一个逻辑:
private void MSMQRetrievalProc()
{
try
{
Message mes;
WaitHandle[] handles = new WaitHandle[1] { exitEvent };
while (!exitEvent.WaitOne(0, false))
{
try
{
mes = MyQueue.Receive(new TimeSpan(0, 0, 1));
HandleMessage(mes);
}
catch (MessageQueueException)
{
}
}
}
catch (Exception Ex)
{
//Handle Ex
}
}
MSMQRetrievalThread = new Thread(MSMQRetrievalProc);
MSMQRetrievalThread.Start();
但是在另一个服务(消息调度程序)中,我使用基于MSDN Example的异步消息读取:
public RootClass() //constructor of Main Class
{
MyQ = CreateQ(@".\Private$\MyQ"); //Get or create MSMQ Queue
// Add an event handler for the ReceiveCompleted event.
MyQ.ReceiveCompleted += new
ReceiveCompletedEventHandler(MsgReceiveCompleted);
// Begin the asynchronous receive operation.
MyQ.BeginReceive();
}
private void MsgReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)
{
try
{
// Connect to the queue.
MessageQueue mq = (MessageQueue)source;
// End the asynchronous Receive operation.
Message m = mq.EndReceive(asyncResult.AsyncResult);
// Process received message
// Restart the asynchronous Receive operation.
mq.BeginReceive();
}
catch (MessageQueueException Ex)
{
// Handle sources of MessageQueueException.
}
return;
}
异步处理是否假设每个消息都将在主线程以外的地方处理?
可能并且需要将此(第二)方法放在单独的线程中吗?
请建议更好的方法或一些简单的选择.
到达队列的邮件没有一些规则定义的行为.可能是很长一段时间没有任何消息将会到达,或者在一秒钟内我会收到许多(最多10个甚至更多)消息.根据某些消息中定义的操作,它将需要删除/更改一些具有正在运行的线程的对象.
解决方法:
我强烈建议使用WCF进行MSMQ.
http://msdn.microsoft.com/en-us/library/ms789048.aspx
这允许您使用WCF线程模型异步处理传入调用,该模型允许限制,上限,重试等…
内容总结
以上是互联网集市为您收集整理的c# – 在MultiThreading Service中监听什么是更好的方法?全部内容,希望文章能够帮你解决c# – 在MultiThreading Service中监听什么是更好的方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。