最干净的使用方式结合了多个流

时间:2012-12-05 21:43:48

标签: f# system.reactive

我正在寻找一种组合多个流的方法,在这个简单的例子中我有5个,但我可以轻松拥有更多。我目前正在使用VS 2010,但可能会转向2012年。因此,如果F#3.0中的任何一个功能有帮助,那么我会对这些功能开放。

在这种情况下计算构建器会有帮助吗?

let ``open`` = groupedByDay |> Observable.bind(fun group -> group |> Observable.map     (fun bar -> bar.Open) |> Observable.FirstAsync)
let high = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.High) |> Observable.Max)
let low = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.Low) |> Observable.Min)
let close = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun     bar -> bar.Close,bar.Time) |> Observable.LastAsync)
let volume = groupedByDay |> Observable.bind(fun group -> group |> Observable.map (fun bar -> bar.Volume) |> Observable.Sum)
let combined = ``open``.And(high).And(low).And(close).And(volume).Then(fun o h l (c,t) v -> {Open = o; High = h; Low = l; Close = c; Time = t; Volume = v;})
            |> Observable.atwhen
            |> Observable.perform(log "Grouped") |> Observable.subscribe(fun _ -> ())

0 个答案:

没有答案