Какова практическая разница между всеми этими реактивными наблюдаемыми расширениями?

StackOverflow https://stackoverflow.com/questions/2389365

  •  24-09-2019
  •  | 
  •  

Вопрос

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

  • Первый()
  • Прошлой()
  • Waptwalue ()
  • MOSTRECENTVALUE ()
  • NextValue ()
  • Одинокий()
  • Взять (1)

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

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

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

Это было полезно?

Решение

Первый, последний и сингл блокирует; Рекомендуется использовать INTE (1) вместо этого, поэтому вы получаете iobsiblebable обратно. Когда операторы запроса цепи рекомендуется избегать первого, последнего и одиночного, потому что вы выходите из безопасности монады ... То есть, вы блокируете побочные эффекты. Видеть http://blogs.msdn.com/jeffva/archive/2009/12/09/first-last-contains-etc-can-be-extremely-dedconevery-yet-extremely-use.aspx. на большее об этом.

MOSTRECENTVALUE и AnywayValue были удалены из последней версии RX, потому что они также блокируются, поэтому оставленные только блокирующие операторы - сначала, последнее и одиночные (и варианты XXXORDEFAULT), в соответствии с последними заметками выпуска.

MOSTETENT вернет последнее значение выборку, так часто, как вы его называете (и требует инициального значения, чтобы гарантировать, что он никогда не будет ждать), т. Е. Без потребления ", тогда как последнее будет ждать, пока стоимость не будет возвращать его" с потреблением "- То есть, если вы снова звоните последним, он не вернет одинаковое значение, что и последний звонок, он будет подождать, пока не придет следующее значение, если когда-либо.

Другие советы

Спасибо @richardhein за отличный ответ.

Методы расширения блокировки должны быть действительно перемещены в собственное пространство имен, поэтому разработчик должен специально выбрать их для проекта (или в частности, файл CS). Вы добавляете тонну сложности с помощью RX, и случайно используя метод блокировки, который вы в основном отклоняете обратно в Ilist / iEnumerable.

Я думаю, что это самая большая ошибка, которую сделана команда RX, IOW, я думаю, включая их по умолчанию, они пропустили «PAP успеха» с RX. Исправьте это, и я бы позвонил RX API выбора при выходе за пределы однопоточной + Async в C # (т.е. почему .NET более мощный, чем скажем, nodejs).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top