【问题标题】:Observable class property doesn't trigger subscriptionObservable 类属性不会触发订阅
【发布时间】:2020-04-30 03:48:22
【问题描述】:

简单的可观察变量按预期工作,立即在同一线程上触发回调。 为什么任何可观察类型(Subject、ISubject、Observable、IObservable)的类变量都不会触发回调?

简单变量示例 - [作品]

var x1 = new Subject<string>();
var x2 = x1.DistinctUntilChanged();

x2.Subscribe(o =>
{
  // Triggered as expected
});

x1.OnNext("Hello");

类示例 - [不工作]

public class InstrumentModel
{
  public Subject<string> Demo => new Subject<string>();
}

var class1 = new InstrumentModel();

class1.Demo
  //.DistinctUntilChanged()
  //.SubscribeOn(Scheduler.CurrentThread)
  //.ObserveOn(Scheduler.CurrentThread)
  .Subscribe(o =>
{
  // Never triggered 
});

class1.Demo.OnNext("Hello");

【问题讨论】:

    标签: c# .net-core rx.net


    【解决方案1】:

    问题是您让Demo 在每次使用时都返回Subject&lt;string&gt; 的新实例。

    您订阅的Demo 实例与您调用OnNext() 的实例不同。

    class1.Demo.Subscribe(...); // makes new instance `Subject<string>`
    
    class1.Demo.OnNext("Hello"); // makes another new instance of `Subject<string>`
    
    

    保持相同的实例,它会工作。例如:

    public class InstrumentModel
    {
      public Subject<string> Demo = new Subject<string>();
    }
    

    或:

    public class InstrumentModel
    {
        public InstrumentModel()
        {
            this.Demo = new Subject<string>();
        }
        public Subject<string> Demo { get; }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-01
      • 2018-08-03
      • 2022-07-11
      • 2018-10-03
      • 2018-10-26
      • 1970-01-01
      • 2019-04-28
      • 2016-10-28
      • 1970-01-01
      相关资源
      最近更新 更多