Скажем, я хочу сгенерировать асинхронный поток случайных чисел, который выдает новое значение каждые 100 миллисекунд. Пока я пытался найти решение, моя первая попытка выглядела примерно так:
var random = new Random();
Observable.Start(() => random.Next())
.Delay(TimeSpan.FromMilliseconds(100))
.Repeat()
.Subscribe(Console.WriteLine);
Если вы попытаетесь запустить это, вы заметите, что оно просто продолжает повторять одно и то же значение снова и снова. Хорошо, я думаю, я неправильно понял, как работает повтор. Поиграв немного,Я придумал это, и это сработало:
var random = new Random();
Observable.Defer(()=> Observable.Start(() => random.Next()))
.Delay(TimeSpan.FromMilliseconds(100))
.Repeat()
.Subscribe(Console.WriteLine);
Поэтому я обратился к документации MSDN, чтобы понять, что на самом деле делает Defer, и вот что там написано:
Returns an observable sequence that invokes the observable factory whenever a new observer subscribes.
Я предполагаю, что меня смущает это :в моем примере кода, я только когда-либо подписывался на Observable один раз, так почему же он, по-видимому, вызывает Observable.Start(...)
снова и снова? Или я неправильно понимаю Repeat()
? Любое разъяснение было бы здорово.