RxJava, neden 1 ve 2 bu sırayla gelmiyor?
Sep 24 2020
Observable.just(1, 2, 3, 4, 5)
.flatMap(
a -> {
if (a < 3) {
return Observable.just(a).delay(3, TimeUnit.SECONDS);
} else {
return Observable.just(a);
}
})
.doOnNext(
a -> System.out.println("Element: " + a )
.subscribe();
1 ve 2 3 saniye beklerse, neden bazen 2 önce gelir sonra 1 gelir? Her zaman 1'inci olması gerekmez mi?
ara sıra:
Element: 3
Element: 4
Element: 5
Element: 2
Element: 1
ve
Element: 3
Element: 4
Element: 5
Element: 1
Element: 2
hep böyle çıkmamalı mı (3,4,5,1,2)?
Yanıtlar
1 bubbles Sep 24 2020 at 14:56
Varsayılan olarak delayoperatör hesaplama planlayıcı kullanır:
@CheckReturnValue
@SchedulerSupport(SchedulerSupport.COMPUTATION)
public final Observable<T> delay(long delay, TimeUnit unit) {
return delay(delay, unit, Schedulers.computation(), false);
}
Bu, her gecikme işleminin hesaplama havuzundan alınan bir iş parçacığında yürütüldüğü anlamına gelir.
flatMapson öğenin tamamen işlenmesini beklemeyin, Öyleyse 1ve 2paralel olarak farklı iş parçacıklarında (hesaplama havuzundan alınan) işlenirler. Farklı iplikler, siparişin garanti edilmediği anlamına gelir .
Tüm zaman tabanlı operatörler varsayılan olarak hesaplama planlayıcı kullanır. Buradaki diğer cevabıma bir göz atabilirsiniz.
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'