2015-03-12 3 views
-1

Мне нужно реализовать производство с двумя потребителями. Существует некоторая коллекция, которая делится между двумя потребителями, и они ожидают, пока производство не добавит что-то в эту коллекцию.лучший способ реализовать производство с двумя потребителями

Я думаю, что использование BlockingCollection - лучший способ - и используйте BlockingCollection.GetConsumingEnumerable() для отслеживания совместно используемой коллекции для обоих пользователей.

+0

Какие активные классы, производитель? или потребителей? –

+0

приложение имеет 3 основных потока - два от потребителей и на производителя. все они активны – Yanshof

ответ

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; } 
} 

Затем вы можете подписаться на что Наблюдаемые несколько раз:

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)); 
    } 

EDIT

Это не ясно, если вы хотите, чтобы оба потребителей обрабатывать каждое сообщение или распространение с использованием системы массового обслуживания, где несколько потоков считываются из очереди, которая имеет работу для обработки , и каждый кусочек работы обрабатывается только одним потребителем. Если да, то посмотрите на решение для корпоративных сообщений, такое как MSMQ или RabbitMQ или любую другую систему MQ. Если он является внутренним для вашего приложения, используйте только то, что ConcurrentQueue

Смежные вопросы