Предоставление ConcurrentQueue <T>как IObservable <T>? - PullRequest
4 голосов
/ 15 февраля 2010

Я задавался вопросом, возможно ли использовать очередь (в частности, как ConcurrentQueue) в качестве источника IObservable? Что-то вроде;

  Queue = new ConcurrentQueue<IMessage>();
  var xs = Queue.AsEnumerable().ToObservable();

  xs.Subscribe((IMessage msg) =>
     {
        Console.WriteLine("Msg :" + msg.subject);
     });

Я думаю, это не имеет смысла, потому что ничего не снимается. Я пытаюсь реализовать неблокирующий процесс, который может подписаться на «сообщения», передаваемые наблюдателям, следовательно, использование очереди. Я уверен, что должен быть в состоянии сделать это с RX, но, похоже, не могу обойти это!

Меня будут интересовать любые предложения о том, как это можно реализовать. Спасибо!

1 Ответ

2 голосов
/ 15 февраля 2010

Вы правы, преобразование очереди (параллельной или простой, не имеет значения) только перечислит ее, но не исключит очередь. Реальная реализация возможна, но более сложна - см. Ссылку на аналогичный вопрос, который я задал на форуме RX (который по-прежнему является лучшим источником информации о RX по сравнению со StackOverflow):

Как реализовать единую рабочую очередь производителей-потребителей с использованием RX?

...