参数顺序和管道权限运算符

时间:2010-11-29 21:39:03

标签: f# asynchronous .net-4.0 syntactic-sugar

有没有办法简化以下内容,所以我不需要runWithTimeout函数?

let runWithTimeout timeout computation =
   Async.RunSynchronously(computation, timeout)

let processOneItem item =  fetchAction item
                           |> runWithTimeout 2000

编辑: 这就是为什么我需要额外的方法:

let processOneItem item =  fetchAction item
                           |> Async.Catch
                           |> runWithTimeout 2000
                           |> handleExceptions

3 个答案:

答案 0 :(得分:3)

也许你的意思是这样的:

let processOneItem item =
  fetchAction item
  |> fun x -> Async.RunSynchronously(x, 2000)

答案 1 :(得分:3)

我不太热衷于将fun x -> ...用作管道的一部分。

我认为编写代码的流水线样式在API(例如列表)支持时很好,但是当API不符合样式时,最好遵循通常的“C#样”样式。对于coures,这只是个人偏好,但我只想写:

let processOneItem item =  
  let work = Async.Catch(fetchAction item)
  let result = Async.RunSynchronously(work, 30000)
  handleExceptions result

答案 2 :(得分:0)

这是一个更完整的样本,供将来参考:

let processOneItem item =  fetchAction item
                           |> Async.Catch
                           |> fun x -> Async.RunSynchronously(x,30000)
                           |> handleExceptions