F# の非同期ワークフローがよくわかってない
F# 3.0で以下のコードが期待通りに動かない理由がよくわかってない。Ctrl+Cを押してもプログラムが終了してくれない。Wait()したままになる。
open System [<EntryPoint>] let main argv = Async.StartAsTask(Async.AwaitEvent(Console.CancelKeyPress)).Wait() printfn "end" 0
Wait()する前にConsole.CancelKeyPressに空のイベントハンドラを登録しとくと、期待通りに end と出力後にプログラムが終了してくれる。
open System [<EntryPoint>] let main argv = Console.CancelKeyPress.Add(fun x -> ()) //これを追加すると期待通りに動く Async.StartAsTask(Async.AwaitEvent(Console.CancelKeyPress)).Wait() printfn "end" 0
なんか使い方間違ってんのかな…?
追記
他のイベントでは期待通り動くし、Console.CancelKeyPressだけ特殊な雰囲気。詳細はMSに聞かないとわからないかも。