Информация об изменениях

Сообщение Re[9]: [Rx] Задержать событие при условии от 04.12.2016 12:02

Изменено 04.12.2016 12:05 TK

Здравствуйте, _NN_, Вы писали:


TK>>Это все источник событий тормозить не будет и все сильно будет зависить от того, как обрабатывать результат. можно написать someObservable.Select(x => getY(x)).Concat(), можно someObservable.Select(x => getY(x)).Merge() — с разными последствиями на результат. Вам какие именно нужны?

_NN>Мне главное, чтобы был порядок.
_NN>Т.е. если приходит событие пока я жду пусть подождёт в сторонке и обработается когда придёт его очередь.
_NN>При этом хотелось бы дать другим подписчикам работать дальше пока я жду.

Не понятно...

1. Порядок даст Concat() но, пока идет ожидание будет копиться очередь из не обработанных событий (ну и с TimeOut будут заморочки). Merge() такую очередь копить не будет но, порядок следования событий будет "сбит".
2. Подписчик это кто? Он ваш или это подписчик на someObservable? Если someObservable то, они блокироваться не будут. Если ваш то см. пункт 1
Re[9]: [Rx] Задержать событие при условии
Здравствуйте, _NN_, Вы писали:


TK>>Это все источник событий тормозить не будет и все сильно будет зависить от того, как обрабатывать результат. можно написать someObservable.Select(x => getY(x)).Concat(), можно someObservable.Select(x => getY(x)).Merge() — с разными последствиями на результат. Вам какие именно нужны?

_NN>Мне главное, чтобы был порядок.
_NN>Т.е. если приходит событие пока я жду пусть подождёт в сторонке и обработается когда придёт его очередь.
_NN>При этом хотелось бы дать другим подписчикам работать дальше пока я жду.

Не понятно...

1. Порядок даст Concat() но, пока идет ожидание будет копиться очередь из не обработанных событий (ну и с TimeOut будут заморочки). Merge() такую очередь копить не будет но, порядок следования событий будет "сбит".
2. Подписчик это кто? Он ваш или это подписчик на someObservable? Если someObservable то, они блокироваться не будут. Если ваш то см. пункт 1

someObservable
  .Select(x => getY(x))
  .Merge()|Concat()|MergeAndSort()
  .Where(y => y.IsValid)
  .Scan(new { Current=abc, Prev=null }, (prev, cur) => new { Current=cur, Prev=prev.Current })
  .Select(makeResult)