Каково практическое различие среди всех этих Реактивных Заметных расширений?

Учитывая BehaviorSubject, каково практическое различие между вызовом всех этих различных функций на нем?

  • Сначала ()
  • В последний раз ()
  • LatestValue ()
  • MostRecentValue ()
  • NextValue ()
  • Единственный ()
  • Возьмите (1)

Принятие меня понимает это правильный, они должны все сделать о том же самом, учитывая BehaviorSubject.

Если так, затем какой вызов является самым соответствующим (которым я имею в виду: который лучше всего передает мое намерение)? Первый или Единственный, возможно?

В противном случае затем, каковы практические различия?

7
задан Ruben Bartelink 26 April 2010 в 08:54
поделиться

1 ответ

First, Last и Single блокируют; рекомендуется вместо них использовать Take(1), чтобы получить обратно IObservable. При цепочке операторов запросов рекомендуется избегать First, Last и Single, потому что вы выходите из безопасности монады... то есть у вас появляются блокирующие побочные эффекты. Подробнее об этом смотрите http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dangerous-yet-extremely-useful.aspx.

MostRecentValue и LatestValue были удалены из последней версии Rx, потому что они также блокируют, поэтому единственными блокирующими операторами остались First, Last и Single (и варианты xxxOrDefault), согласно последним заметкам к выпуску.

MostRecent будет возвращать последнее выбранное значение, как часто вы его вызываете (и он принимает initialValue, чтобы гарантировать, что он никогда не будет ждать), т.е. "без потребления", в то время как Latest будет ждать, пока не придет значение, а затем вернет его "с потреблением" - т.е. если вы снова вызовете Latest, он не вернет то же значение, что и при последнем вызове, он будет ждать, пока не придет следующее значение, если вообще придет.

6
ответ дан 7 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: