【发布时间】:2020-07-10 14:54:26
【问题描述】:
为什么泛型类型被限制为单位,我怎样才能以 myFunc 被正确键入为 unit -> Async<'t> 的方式编写它?
let myFunc (func: unit -> Async<'t>) = // myFunc: unit -> Async<unit>
async {
try
do! Async.Sleep 500
return! func() // 't constrained to unit here
with _ex ->
do! Async.Sleep 200
failwith "failed"
}
编辑:我希望这将是一个很好的最小复制,但这是我真正想做的:
let retryUntilTimeout (func: unit -> Async<'t>) timeout =
async {
let sw = Stopwatch.StartNew()
while sw.ElapsedMilliseconds < timeout do
try
return! func ()
with _ex ->
printfn "failed"
do! Async.Sleep 200
raise (TimeoutException())
}
【问题讨论】:
标签: f#