Почему AsObservable, используемый с BroadCastBlock, не получает все значенияC#

Место общения программистов C#
Anonymous
Почему AsObservable, используемый с BroadCastBlock, не получает все значения

Сообщение Anonymous »

Я экспериментировал с трансляцией BroadcastBlock наблюдателям. Однако я обнаружил, что это работает не совсем так, как я ожидал.
Это минимальный пример, показывающий (для меня) неожиданное поведение:

Код: Выделить всё

var broadCastBlock = new BroadcastBlock(i => i);

Func actionGenerator = (s) => {
return new Action(i => {
Console.WriteLine(s + " " + i);
});
};

Action actionFoo = actionGenerator("FOO");
Action actionBar = actionGenerator("BAR");

Console.WriteLine("-----");
var observable = broadCastBlock.AsObservable();

observable.Subscribe(actionFoo);
observable.Subscribe(actionBar);
for (int i = 0; i < 10; i++) {
broadCastBlock.Post(i);
}
Thread.Sleep(1000);
выдает результат:

Код: Выделить всё

-----
FOO 0
BAR 0
FOO 9
BAR 9
Я ожидаю, что будут напечатаны все значения, а не только первое и последнее. Я тестировал свою собственную фиктивную реализацию IObserver, но даже с той, которая просто принимает действие (методы расширения из Rx.NET), все то же самое.
Почему это происходит и как я могу обеспечить передачу всех значений моим наблюдателям?

Подробнее здесь: https://stackoverflow.com/questions/791 ... all-values

Вернуться в «C#»