与两个消费者一起实施生产的最佳方式

时间:2015-03-12 23:21:00

标签: c#

我需要与两个消费者一起实施生产。在两个消费者之间共享一些集合,他们都等到生产将向此集合添加内容。

我认为使用BlockingCollection是最好的方法 - 并使用BlockingCollection.GetConsumingEnumerable()跟踪两个使用者的共享集合。

1 个答案:

答案 0 :(得分:1)

查看ReactiveExtensions

A Playful Introduction to Rx by Erik Meijer

Intro to Rx by Lee Campbell

示例 取自codePERFdotNET

// Or whatever producer you have, expose an IObservable
public interface IApiService 
{
    IObservable<Response> Responses { get; }
}

然后您可以多次订阅该Observable:

    public Controller(IApiService service)
    {
        // Do one thing for each response
        service.Responses
            .Subscribe(responseHandler);

        // Do something else for each response
        service.Responses
            .Subscribe(r => _throttle.OnNext(0));
    }

修改

目前尚不清楚是否希望两个消费者使用排队系统处理每个消息或分发,其中多个线程读取有待处理的队列,并且每个工作仅由1个消费者处理。如果是这样,请查看企业消息传递解决方案,例如MSMQRabbitMQ或任何其他MQ系统。如果它仅在您的应用内部使用,请使用ConcurrentQueue

之类的内容