F#使用来自异步的返回值

Chi*_*ico 3 f# asynchronous

我正在努力学习F#,但我一直在遇到问题.最新的是使用异步.在下面的代码中,我正在尝试运行两个长时间运行的操作并根据结果执行计算但是我收到错误"Async不支持+运算符".我已经尝试过铸造等让它工作,但我没有得到任何快速.

有人可以解释我哪里出错了.

谢谢.

let SumOfOpFaults =
    async{
        printfn "Getting Sum of Op Faults"
        return query {
            for a in AlarmResult do
            sumBy a.UserFaultTime
        }
    }

let SumOfMcFaults =
    async{
        printfn "Getting Sum of Machine Faults"
        return query {
            for a in AlarmResult do
            sumBy a.MachineFaultTime
        }
    }

[SumOfMcFaults; SumOfOpFaults]
|> Async.Parallel
|> Async.RunSynchronously
|> ignore

let total = SumOfOpFaults + SumOfMcFaults // <---Error Here
Run Code Online (Sandbox Code Playgroud)

The*_*Fox 7

SumOfOpFaults被定义为Async<'T>.它永远不会改变为a,'T所以你+以后不能使用它.

Async.Parallel将任何Async计算序列转换为一个Async并行运行它们的计算并返回一个数组.

Async.RunSynchronously没有给你副作用的结果,但作为返回值.所以你只需要这样做:

let total =
    [SumOfMcFaults; SumOfOpFaults]
    |> Async.Parallel
    |> Async.RunSynchronously
    |> Array.sum
Run Code Online (Sandbox Code Playgroud)