我想知道,为什么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
方法,这种情况会变得更糟:结果是保证死锁。
这种行为有什么原因吗?