为方法创建IObservable的好方法是什么?

Ser*_*hov 14 c# system.reactive

比方说,我们有一个班级:

public class Foo
{
   public string Do(int param)
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个由Do方法生成的值的可观察值.一种方法是创建一个从Do调用的事件,并使用Observable.FromEvent创建observable.但不知何故,为了完成任务,我对创建一个事件并不感到满意.有没有更好的方法呢?

Ser*_*hov 8

马特的回答让我想到了这个:

public class Foo
{
    private readonly Subject<string> _doValues = new Subject<string>();

    public IObservable<string> DoValues { get { return _doValues; } }

    public string Do(int param)
    {
        var ret = (param * 2).ToString();
        _doValues.OnNext(ret);
        return ret;
    }
}


var foo = new Foo();
foo.DoValues.Subscribe(Console.WriteLine);
foo.Do(2);
Run Code Online (Sandbox Code Playgroud)

  • 如果这正是您真正想要的,那么您至少应该通过将一行更改为public IObservable <string> DoValues {get {return _doValues.AsObservable();来保护您的内部状态.}.这将阻止消费者,只需将您的IObservable转换回ISubject和OnNext-ing他们自己的值.:( (2认同)