你如何在FSharp.Control.Reactive库中使用Observable.create?

时间:2015-04-03 16:39:16

标签: f# system.reactive

我正在试图弄清楚如何在FSharp.Control.Reactive库中使用Observable.create函数,但似乎缺少了一些东西。

函数签名定义为:

((IObserver<'a> -> unit -> unit) -> IObservable<'a>)

我尝试了几种创建observable的方法,例如:

  Observable.create (fun obs -> fun _ -> obs.OnNext("xxx") )
  |> Observable.subscribe (fun x -> printfn "%A" x)

  Observable.create (fun obs -> obs.OnNext("xxx"); fun _ -> () )
  |> Observable.subscribe (fun x -> printfn "%A" x)

编译但不执行OnNext,因此不会调用subscribe中的printfn语句。

我可以直接从System.Reactive.Linq命名空间调用Observable.Create方法,如下所示:

  Observable.Create(fun (obs : IObserver<string>) -> obs.OnNext("www"); Action( fun _ -> () ) )
  |> Observable.subscribe (fun x -> printfn "%A" x)

这将打印“www”到互动。 同样,我可以使用Observable.createWithDisposable,如下所示:

Observable.createWithDisposable(fun obs -> obs.OnNext("yyy") ; Disposable.Empty )
|> Observable.subscribe (fun x -> printfn "%A" x)

将此内容发送到互动版“yyy”

所以只是我遇到麻烦的FSharp.Control.Reactive.Observable.create。

我已经看了一眼,但是找不到任何关于如何调用它的例子,所以任何帮助都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:1)

我向开发者提出了一个问题。他们现在已经删除了Observable.create函数,所以现在使用System.Reactive.Linq.Observable.Create()方法创建observable。

这使得这个问题现在无效。

https://github.com/fsprojects/FSharp.Control.Reactive/commit/c8f6d245e75d55b2bd6077c53b311119422c97a1

答案 1 :(得分:0)

我曾asked that使用c#。

使用F#Control.Reactive将是:

        Observable.create(
            fun observer ->                        
                Action (fun () -> 
                    foo.OnBar(
                       fun (args : Args) -> 
                         observer.OnNext(args)            
                         observer.OnCompleted())))