有没有办法简化以下内容,所以我不需要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
答案 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