c#Windows Service事件处理程序上的新线程

时间:2017-01-30 19:12:13

标签: c# multithreading rabbitmq

我有Windows服务,在服务启动时订阅RabbitMQ队列。

        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {

            channel.ExchangeDeclare(exchange: _serviceConfiguration.ExchangeName, type: _serviceConfiguration.ExchangeType);
            var queueName = channel.QueueDeclare().QueueName;

            channel.QueueBind(queue: queueName,
                                exchange: _serviceConfiguration.ExchangeName,
                                routingKey: _serviceConfiguration.RoutingName);

            var consumer = new EventingBasicConsumer(channel);


            consumer.Received += (model, ea) =>
            {
                var body = ea.Body;
                var message = Encoding.UTF8.GetString(body);
                //do stuff
            };

        }

对邮件执行的操作可能非常耗时,因为它会调用多个其他Web服务。

我是否正确假设我可以通过为每条消费消息启动新线程来提高性能?每个新线程都会花费大部分时间等待来自外部呼叫的响应。

我该怎么做?我对tasks / threads / await-async有点困惑。

我希望将创建的线程数限制为一些可配置的数量,因为传入的消息排队的速度可能远远快于它们的处理速度。

0 个答案:

没有答案