【发布时间】:2020-04-21 05:00:19
【问题描述】:
我在使用 RabbitMQ 点网库的 C# 中的不同队列上有两个消费者。
我想要什么:
由于某些业务逻辑,我不得不在一个消费者中等待一段时间
所以我为此使用了Thread.Sleep()
问题
如果我在一个事件中使用Thread.Sleep,第二个线程也不会暂停
我的代码:
consumer.Received += (model, ea) =>
{
try
{
DRModel drModel = JsonConvert.DeserializeObject<DRModel>(Encoding.UTF8.GetString(ea.Body));
RMQReturnType type = ProcessSubmitSMS(drModel);
if (type == RMQReturnType.ACK)
channel.BasicAck(ea.DeliveryTag, false);
else
{
channel.BasicNack(ea.DeliveryTag, false, true);
Thread.Sleep(300000); // <=== SLEEP
}
}
catch (Exception ex)
{
channel.BasicNack(ea.DeliveryTag, false, true);
WriteLog(ControlChoice.ListError, "Exception: " + ex.Message + " | Stack Trace: " + ex.StackTrace.ToString() + " | [Consumer Event]");
}
};
【问题讨论】:
-
这个linke如何注册你的回调并返回
task而不是使用Thread.sleep() -
但是你为什么需要
Sleep呢? -
一些业务逻辑
标签: c# multithreading events rabbitmq