Ответ прост, но мне потребовалось некоторое время, чтобы понять его.
share()
- это сокращение для publish().refCount()
.refCount()
похоже на autoConnect()
, за исключением одной дополнительной функции: он отключается, когда все подписчики отменили или - и это здесь ситуация - поток завершен.
Первый shared.subscribe
создает подписку (черезshare
) к исходному потоку.Все значения отправляются немедленно, поток завершается, подписка отменяется.
Поскольку подписки сейчас нет, вторая shared.subscribe
снова создает подписку, и поток снова начинается с начала.
autoConnect
, однако, не отменяет подписку.Если вы используете его вместо refCount
, подписка на исходный поток остается, но поскольку поток завершен, любой дополнительный подписчик не получит никаких значений.