1

我有这段代码,我使用rabbitmq 客户端。我很好奇这是异步的还是同步的?如果是同步的,我怎样才能让它异步?

        ConnectionFactory factory = new ConnectionFactory();
        factory.HostName = "localhost";
        using (IConnection connection = factory.CreateConnection())
        using (IModel channel = connection.CreateModel())
        {
            channel.QueueDeclare("hello", false, false, false, null);
            for (int i = 0; i < 1000; i++)
            {
                string message = "Hello World!";
                byte[] body = System.Text.Encoding.UTF8.GetBytes(message);

                channel.BasicPublish("", "hello", null, body);

            }

        }
4

1 回答 1

1

请参阅官方 C# 客户端指南的第 2.9 章:

应用程序回调处理程序不得调用阻塞 AMQP 操作(例如 IModel.QueueDeclare、IModel.BasicCancel 或 IModel.BasicPublish)。如果他们这样做,通道将死锁

BasicPublish 是恕我直言阻止同步操作。

于 2012-12-05T17:24:01.313 回答