【发布时间】:2011-11-17 17:57:30
【问题描述】:
我目前有一个后台线程。在这个线程中是一个无限循环。
此循环偶尔会更新数据库中的一些值,然后在 MessageQueue 上侦听 1 秒(使用 queue.Receive(TimeSpan.FromSeconds(1)) )。
只要没有消息进来,这个调用就会在内部抛出一个 MessageQueueException (Timeout) 被捕获,然后循环继续。如果有消息调用正常返回并处理消息,之后循环继续。
这会导致 很多 的第一次机会异常(每秒,除非有要处理的消息),这会在调试输出中产生垃圾邮件,并且当我忘记排除 MessageQueueExceptions 时也会中断调试器。
那么,MessageQueue 的异步处理是如何正确完成的,同时仍然确保,只要我的应用程序运行,队列就会受到监控,并且数据库也会不时更新。当然这里的线程不应该用完100%的CPU。
我只需要大图或一些正确完成异步处理的提示。
【问题讨论】:
-
听上去,没有消息进来的场景并不是异常情况,在这种情况下抛出异常似乎是一种设计味道。
-
是的,你不能在无事可做的情况下只返回null或default吗,为了避免从方法返回而抛出异常有点废话。
-
MessageQueue 类本身正在抛出异常,当超时发生时,不是我。这是我对这个解决方案的问题,是什么让我感到不安。
-
超时异常是 MSMQ 设计的工作方式。你必须每秒轮询一次队列吗?
标签: c# asynchronous msmq message-queue