Powiedz, że chcę generować asynchroniczny strumień liczb losowych, który wypompowuje nową wartość co 100 milisekund. Starając się wymyślić rozwiązanie, moja pierwsza próba wyglądała mniej więcej tak:Observable.Defer - potrzebuję wyjaśnienia, co dokładnie robi
var random = new Random();
Observable.Start(() => random.Next())
.Delay(TimeSpan.FromMilliseconds(100))
.Repeat()
.Subscribe(Console.WriteLine);
Jeśli spróbujesz i uruchomić to zauważysz, że po prostu powtarza tę samą wartość w kółko. OK, chyba źle zrozumiałem, jak działa Powtarzanie. Po zabawy na trochę, wymyśliłem to i to działało:
var random = new Random();
Observable.Defer(()=> Observable.Start(() => random.Next()))
.Delay(TimeSpan.FromMilliseconds(100))
.Repeat()
.Subscribe(Console.WriteLine);
Poszedłem więc do dokumentacji MSDN, aby zrozumieć, co Defer faktycznie robi, a to jest to, co mówi:
Zwraca obserwowalną sekwencję, która wywołuje obserwowalną fabrykę za każdym razem, gdy nowy obserwator subskrybuje.
Chyba mój zamieszanie jest taka: w moim próbki kodu, mam tylko kiedykolwiek subskrypcji raz obserwowalnym, więc dlaczego jest pozornie wywoływanie Observable.Start(...)
kółko? Czy nie rozumiem, że jest to Repeat()
? Wszelkie wyjaśnienia byłyby niesamowite.