Это пример, демонстрирующий разницу между двумя ActionBlock, все значения которых передаются в их и наличие двух IObserver, которые не получают все значения:
Код: Выделить всё
var broadCastBlock = new BroadcastBlock(i => i);
Func actionGenerator =
(s) => (int i) => Console.WriteLine(s + " " + i);
Action actionFoo = actionGenerator("FOO");
Action actionBar = actionGenerator("BAR");
var actionBlockFoo = new ActionBlock(actionFoo);
var actionBlockBar = new ActionBlock(actionBar);
broadCastBlock.LinkTo(actionBlockFoo);
broadCastBlock.LinkTo(actionBlockBar);
for (int i = 0; i < 5; i++) {
broadCastBlock.Post(i);
}
Thread.Sleep(1000);
Console.WriteLine("-Observable-");
broadCastBlock = new BroadcastBlock(i => i);
var observable = broadCastBlock.AsObservable();
observable.Subscribe(actionFoo);
observable.Subscribe(actionBar);
for (int i = 0; i < 5; i++) {
broadCastBlock.Post(i);
}
Thread.Sleep(1000);
Код: Выделить всё
BAR 0
FOO 0
FOO 1
BAR 1
BAR 2
BAR 3
BAR 4
FOO 2
FOO 3
FOO 4
-Observable-
FOO 0
BAR 0
FOO 4
BAR 4
Почему это происходит и как я могу обеспечить получение всех значения, передаваемые моим наблюдателям так же, как и для ActionBlock?
Подробнее здесь: https://stackoverflow.com/questions/791 ... all-values
Мобильная версия