CombineLatest, אָבער נאָר שטופּן פֿאַר די לינקס

איך דאַרפֿן צו ינסטרומענט אַ ווערסיע פון ​​ CombineLatest (איך וועט רופן עס WithLatest דאָ) וואָס רופט די סעלעקטאָר פֿאַר יעדער נומער אויף די לינקס און די לעצטע נומער אויף די רעכט. עס זאָל נישט שטופּן פֿאַר פּונקט רעכט ענדערונגען פון זאכן.

איך טראַכטן צי דאָס איז געבויט אָבסערוואַבלע. שאַפֿן אָדער אַ קאָמבינאַציע פון ​​יגזיסטינג יקסטענשאַנז איז נישט דער הויפּט וויכטיק; איך וועט מאַכן דעם אַ "קעסטל" געשפּרייט אופֿן אין קיין וועג.

בייַשפּיל

var left = new Subject<int>();
var right = new Subject<int>();

left.WithLatest(right, (l,r) => l + " " + r).Dump();

left.OnNext(1);   // <1>
left.OnNext(2);   // <2>
right.OnNext(1);  // <3>
right.OnNext(2);  // <4>
left.OnNext(3);   // <5>

זאָל טראָגן

2 1
3 2

רעדאַגירן : די לאָגיק פון מיין בייַשפּיל איז:

  1. לינקס איז פּאַפּיאַלייטאַד מיט 1. רעכט ליידיק, קיין וואַלועס פּושט.
  2. לינקס ווערט דערהייַנטיקט מיט 2 (עס פארגעסט דעם פריערדיקן ווערט). רעכט איז נאָך ליידיק, אַזוי גאָרנישט איז פּושט.
  3. רעכט ווערט פּאַפּיאַלייטאַד מיט 1, אַזוי לינקס = 2 (די לעצטע ווערט), רעכט = 1 איז פּושט. ביז דעם פונט, עס איז קיין חילוק צווישן WithLatest און CombineLatest
  4. רעכט איז דערהייַנטיקט - גאָרנישט איז פּושט. דאָס איז וואָס ס 'אַנדערש
  5. לינקס איז דערהייַנטיקט מיט 3, אַזוי Left = 3, Right = 2 (די לעצטע ווערט) איז פּושט.

עס איז סאַגדזשעסטיד אַז איך פּרובירן:

var lr = right.ObserveOn(Scheduler.TaskPool).Latest();
left.Select(l => l + " " + lr.First()).Dump();

אָבער דאָס בלאַקס אויף די קראַנט פאָדעם פֿאַר מיין פּראָבע.

7
задан Flexo 28 July 2015 в 06:17
поделиться