Rx 的 F# 工作流构建器

标签 f# system.reactive using computation-expression

这里有一个很好的 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 版本稍作更新。即,ForWhile 应实现为:

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/

相关文章:

optimization - 延续+尾递归技巧是否真的用堆栈空间交换堆空间?

c# - 使用 C# Reactive Extensions 在特定时间调用函数

F#菜鸟: matching command line args

asynchronous - F#:从接受回调并返回取消句柄的函数创建异步

winforms - 如何在 WinForm 线程上获取 WinForm 同步上下文或调度

c# - 如何确保 StringBuilder 对象在多线程环境中被 GCed? (鉴于我不能使用 using 关键字)?

C++ 命名空间 : using without owning

c# - 无法在控制台应用程序 C# 中导入 System.Windows.Window 类?

linq - F# 中的 SingleOrDefault

c# - 每个可观察运算符的默认调度程序是什么?