这里有一个很好的 Rx F# 工作流构建器:
http://blogs.msdn.com/b/dsyme/archive/2011/05/30/nice-f-syntax-for-rx-reactive-extensions.aspx
我一直在尝试为工作流制作一个 Using 实现,但一直碰壁。也许现在为时已晚。
如何创建这个?
type RxBuilder () =
// ...
member this.Using (disposable, f) =
Observable.Using(???)
提前致谢。
最佳答案
首先,原始代码需要针对最新的 Rx 版本稍作更新。即,For
和 While
应实现为:
member this.For (xs : 'a seq, f: 'a -> 'b IObservable) =
Observable.SelectMany(xs.ToObservable(), new Func<_, IObservable<_>>(f))
member this.While (f, xs: 'a IObservable) =
Observable.TakeWhile (xs, new Func<_,bool>(fun _ -> f()))
然后,基于this ,您可以使用以下代码实现 Using
:
member this.Using(res:#IDisposable, body) = this.TryFinally(body res, fun () -> match res with null -> () | disp -> disp.Dispose())
关于Rx 的 F# 工作流构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074710/