タイムアウト引数Async.RunSynchronously
が与えられたときのセマンティクスがわかりません。次の例が終了しないのはなぜですか?
let runInMaxTime (time: int) (work: Async<'T>) =
try
Async.RunSynchronously(work,time)
|> Some
with
| _ ->
None
let rec forever () : unit =
printfn "Forever looping"
forever ()
// Never terminates
let x = runInMaxTime 10 <| async {return forever ()}
の適切な実装はrunInMaxTime
どのようになりますか? 私が思いついたのは、 Task
s とcancel tokensに基づいていることだけです。