【问题标题】:How do I update/add items in/to an IObservable<int> dynamically?如何动态更新/添加项目到 IObservable<int> 中?
【发布时间】:2012-02-16 15:31:03
【问题描述】:

我有一个 observable 集合,我想继续向其提供对象,即使有人订阅了它,它们也应该到达观察者(这当然是 observable 的主要目的)。我该怎么做?

在下面的程序中,订阅完成后,我想再输入 3 个应该到达观察者的数字。我该怎么做呢?

我不想通过实现IObservable&lt;int&gt; 并使用Publish 方法来实现我自己的 Observable 类的路线?有没有其他方法可以做到这一点?

public class Program
{
    static void Main(string[] args)
    {
        var collection = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        var observableCollection = collection.ToObservable();
        observableCollection.Subscribe(OnNext);
        //now I want to add 100, 101, 102 which should reach my observers
        //I know this wont' work
        collection.Add(100);
        collection.Add(101);
        collection.Add(102);
        Console.ReadLine();
    }

    private static void OnNext(double i)
    {
        Console.WriteLine("OnNext - {0}", i);
    }
}

【问题讨论】:

  • 如果您删除项目,您希望 IObservable 做什么?

标签: c# c#-4.0 system.reactive reactive-extensions-js


【解决方案1】:

这就是我要做的:

    var subject = new Subject<double>();
    var collection = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    var observableCollection = collection
        .ToObservable()
        .Concat(subject); //at the end of the original collection, add the subject
    observableCollection.Subscribe(OnNext);

    //now I want to add 100, 101, 102 which should reach my observers
    subject.OnNext(100);
    subject.OnNext(101);
    subject.OnNext(102);

一般来说,如果您可以观察到产生额外输入的任何东西,您会想要连接 可观察的,而不是强制将这些值推送到主题中,但有时这并不实际。 p>

【讨论】:

  • 尚不清楚 Subscribe(OnNext) 和 subject.OnNext(100) 是否真的是同一个引用。前者是在项目进入时调用的任何方法。后者是一个 Rx 方法,用于通知订阅的观察者一个新的可观察事件已到达序列中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多