我正试图弄清楚如何在FSharp.Control.Rreactive库中使用Observable.create函数,但似乎缺少一些东西。
函数签名定义为:
((IObserver<'a> -> unit -> unit) -> IObservable<'a>)
我尝试了几种不同的方法来创建可观察的,例如:
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,因此不会调用订阅中的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。
我已经看过了,但找不到任何关于如何称呼它的例子,所以任何帮助都将不胜感激。
感谢
我向开发人员提出了一个问题。他们现在已经删除了Observable.create函数,所以现在可以使用System.Reactive.Linq.ObsObservable.create()方法创建可观察对象。
这使得这个问题现在无效。
https://github.com/fsprojects/FSharp.Control.Reactive/commit/c8f6d245e75d55b2bd6077c53b311119422c97a1
我曾经用c#问过这个问题。
使用F#控制。反应式为:
Observable.create(
fun observer ->
Action (fun () ->
foo.OnBar(
fun (args : Args) ->
observer.OnNext(args)
observer.OnCompleted())))