[英]Async workflows in F# - Execute in parallel and do not wait for the result
[英]Async to wait for a key in F#?
我想阻止異步執行,直到用戶按下控制台中的任何鍵為止。
這是我想出的:
let waitForAnyKey = async {
do!
new Task (fun () ->
printfn "%s" "waiting for a key"
Console.ReadKey () |> ignore
printfn "%s" "got a key"
)
|> Async.AwaitTask
}
像這樣使用:
async {
printfn "%s" "Press any key... "
do! waitForAnyKey
printfn "%s" "You pressed a key. "
}
但是,該Task
永遠不會運行。
Task
嗎? 沒有任務,使用Async.FromContinuations
open System
let waitForAnyKey =
Async.FromContinuations (fun (cont, _, _) ->
printfn "%s" "waiting for a key"
cont (Console.ReadKey ())
printfn "%s" "got a key"
)
let test () =
async {
let! key = waitForAnyKey
printfn "%O" key.Key
}
|> Async.RunSynchronously
test ()
您可以編寫不帶Task <-> Async interop位的waitForAnyKey
:
let waitForAnyKey = async {
do Console.ReadKey () |> ignore
}
然后,您可以隨時等待輸入來調用它。 您的用法示例將在此實現中正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.