Скажем, у меня есть набор символов акций:
StockTicker stockTicker =
new StockTicker("MSFT", "APPL", "YHOO", "GOOG");
stockTicker.OnPriceChanged += (sender, args ) =>
{
Console.WriteLine(
"{0}: Price - {1} Volume - {2}",
args.StockSymbol, args.Price, args.Volume);
};
Я могу подписаться на события и получить его как hot IObservable
:
IObservable<PriceChangedEventArgs> priceChangedObservable =
Observable.FromEventPattern<PriceChangedEventArgs>(
eventHandler => stockTicker.OnPriceChanged += eventHandler,
eventHandler => stockTicker.OnPriceChanged -= eventHandler )
.Select( eventPattern => eventPattern.EventArgs );
priceChangedObservable.Subscribe(args => Console.WriteLine(
"{0}: Price - {1} Volume - {2}",
args.StockSymbol, args.Price, args.Volume ) );
Это печатает цитату длякаждый символ в виде новой кавычки: В последовательности каждое событие представляет собой одиночную кавычку YHOO 25.33, MSFT 127, AAPL 175, GOOG 1126
и т. д.
Как изменить приведенный выше код так, чтобы каждая «кавычка» представляла собой комбинацию всех текущих кавычеккаждая отдельная цитата?(YHOO 25.33, MSFT 127, GOOG 1126, AAPL 175)
.«Кавычка» теперь является состоянием последней кавычки, видимой для всех из них, служившей одной «кавычкой».
Я вижу, что Rx имеет оператор Zip
, но семантика этого, по-видимому, нуждается вn
IObservables
, чтобы застегнуть молнию.Здесь есть несколько кавычек, проходящих через одно и то же IObservable
?
Таким образом, Console.WriteLine
будет печатать все n-кавычки, на которые подписано, как одно событие точки (и печатать только тогда, когда все они имеют значение)