是否可以在其 MailboxProcessor 被释放(或以其他方式停止)时立即返回 PostAndAsyncReply?或者是否有一些关于如何安全使用 PostAndReply 方法而不产生死锁的“模式”/最佳实践?
现在我遇到的问题是 PostAndAsyncReply 在处理 MailboxProcessor 后永远不会返回。使用 timeout 参数不是一个选项,因为我不能等待(除了选择合理的超时是非常困难或不可能的,因为它取决于太多的因素)。
[<Test>]
let ``waiting for a reply from a disposed agent``() =
use server = MailboxProcessor.Start(fun inbox -> async {
()
})
(server :> System.IDisposable).Dispose()
server.PostAndReply (fun reply -> reply) // <- deadlock
|> ignore)
编辑:我见过的大多数 MailboxProcessors 示例(包括 MSDN 上的示例)甚至不介意处置 MailboxProcessors。并且 MSDN 没有解释 MailboxProcessors 在被处理时如何反应。有没有必要丢弃它们?