MailboxProcessor
例外を処理するためのデフォルトの戦略が、黙ってそれらを無視するのはなぜだろうか。例えば:
let counter =
MailboxProcessor.Start(fun inbox ->
let rec loop() =
async { printfn "waiting for data..."
let! data = inbox.Receive()
failwith "fail" // simulate throwing of an exception
printfn "Got: %d" data
return! loop()
}
loop ())
()
counter.Post(42)
counter.Post(43)
counter.Post(44)
Async.Sleep 1000 |> Async.RunSynchronously
そして何も起こりません。プログラムの実行が致命的に停止したり、「ハンドルされていない例外が発生しました」というメッセージ ボックスが表示されたりすることはありません。何もない。
誰かがPostAndReply
メソッドを使用すると、この状況はさらに悪化します。結果としてデッドロックが保証されます。
そのような行動の理由はありますか?