gpt4 book ai didi

c# - 摆脱 try/catch - 从消息队列中读取

转载 作者:行者123 更新时间:2023-11-30 18:03:11 25 4
gpt4 key购买 nike

如何修改以下代码块,使其不依赖于 try/catch block 和 IOTimeout。此函数每 1 分钟调用一次。所以我只想处理在上次调用后排队的 ID 列表。

如果我在队列中没有消息等待时收到空值,那会解决我的问题,但 API http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue.receive.aspx显示接收的所有签名都是同步的(我无法阻止线程)或带有 MessageQueueException 异常,我必须通过 try/catch block 来利用这些异常。在阅读了一些建议不要使用 try/catch 来控制程序流的文章后,我想避免这种情况。

    #pragma warning disable
public void ConsumeEvents2()
{
var listOfJobs = new List<int>();

try {
while (true) {
// receive all messages and add in a list to process later
Message message = messageQueue.Receive(new TimeSpan(0,0,3));
JobEvent evt = (JobEvent)message.Body;
listOfJobs.Add(evt.DataNumber);
}
} catch (MessageQueueException e) {
if (e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout) {
// process the numbers received
ProcessJobList(listOfJobs);
return;
}
throw;
}

}
#pragma warning restore

最佳答案

尽量不要直接访问它,看一下微软的这段代码-

using System;
using System.Windows.Controls;
using System.Windows.Messaging;

namespace ReceivingApplication
{
public partial class Receiver : UserControl
{
public Receiver()
{
InitializeComponent();

LocalMessageReceiver messageReceiver =
new LocalMessageReceiver("receiver",
ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
messageReceiver.MessageReceived += messageReceiver_MessageReceived;
try
{
messageReceiver.Listen();
}
catch (ListenFailedException)
{
output.Text = "Cannot receive messages." + Environment.NewLine +
"There is already a receiver with the name 'receiver'.";
}
}

private void messageReceiver_MessageReceived(
object sender, MessageReceivedEventArgs e)
{
e.Response = "response to " + e.Message;
output.Text =
"Message: " + e.Message + Environment.NewLine +
"NameScope: " + e.NameScope + Environment.NewLine +
"ReceiverName: " + e.ReceiverName + Environment.NewLine +
"SenderDomain: " + e.SenderDomain + Environment.NewLine +
"Response: " + e.Response;
}
}
}

关于c# - 摆脱 try/catch - 从消息队列中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com