Проблема:.Издатель/подписчик в LINQ?
IEnumerable<Signal> feed = GetFeed();
var average1 = feed.MovingAverage(10);
var average2 = feed.MovingAverage(20);
var zipped = average1.Zip(average2, (x,y) => Tuple.Create(x,y));
Когда я перебирать "на молниях", GetFeed() GetEnumerator() вызывается дважды, и создает все виды проблем синхронизации. Существует ли оператор LINQ, который может использоваться для передачи значений от одного производителя нескольким потребителям? Я знаю о Memoize, но в моем случае я не могу предсказать размер буфера, чтобы медленные и быстрые потребители «счастливы».
Я думаю о написании собственного оператора, который будет хранить отдельные очереди для каждого потребителя, но хотел бы проверить, существует ли существующее решение.
Да, я смотрю на Rx. В нем есть публикация(), которая охватывает этот сценарий. Но, к сожалению, есть другие проблемы, которые мешают мне полагаться на это на 100%. Потребуется некоторое время, чтобы привыкнуть к нему, что может создать проблемы с приближением других разработчиков. –
@Serge: Вы всегда можете создать свой собственный эквивалент, как раз столько, сколько вам нужно - что может быть проще. Я сделал что-то подобное раньше; он был намного менее изящным, чем Rx, но мне было легче понять в то время :) –
По иронии судьбы, после дня прототипирования я снова посмотрю на Rx. Модель Push выглядит более подходящей для моего сценария ... меньше блокировки –