【问题标题】:IObservable - Ignoring the prior resultIObservable - 忽略先前的结果
【发布时间】:2011-03-18 11:02:00
【问题描述】:

我有一个 IObservable,它可以实现为 BehaviorSubject、ReplaySubject 或类似的东西。

在以下场景中,我不希望订阅者获取最后一个缓存值,而是希望它获取下一个要通过的值。有什么想法吗?

var subject = new BehaviorSubject(1);
subject.OnNext(2);

subject.Subscribe(x => Console.WriteLine(x));

subject.OnNext(3);

注意,我要打印的数字是 3... 我猜我需要在“subject.Subscribe”之间放置一种反应式扩展方法来获得新的 observable 或其他东西。

【问题讨论】:

  • 所以你希望能够获得热或冷的 observables 并让它们都表现得好像它们很热?或者它只是您想要忽略的 last 结果?

标签: c# .net system.reactive


【解决方案1】:

这应该做你想做的:

var subject = new BehaviorSubject(1);
subject.OnNext(2);

subject
       .Skip(1) // 
       .Subscribe(x => Console.WriteLine(x));

subject.OnNext(3);

【讨论】:

    【解决方案2】:

    在您的特定 sn-p 中,您可以只使用常规主题并获得您想要的。或者对于一个通用的冷 Observable,你可能想要someSubject.Publish().RefCount()

    【讨论】:

    • 这个例子很简单,问题是如果我提供了一个恰好是 BehaviorSubject 的 I =Observable... 这就是我要防止的。
    • @vdh_ant 然后 Skip(1) 是你的朋友。
    【解决方案3】:

    这对你有用吗?

    var subject = new BehaviorSubject<int>(1);
    
    subject.OnNext(2);
    
    var co = subject.Publish();
    
    co.Subscribe(x => Console.WriteLine(x));
    
    subject.OnNext(3);
    
    co.Connect();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2021-05-16
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2015-03-22
      相关资源
      最近更新 更多