【发布时间】:2013-08-19 11:45:24
【问题描述】:
是否可以让 PostAndAsyncReply 在其 MailboxProcessor 被释放(或以其他方式停止)时立即返回?或者是否有一些关于如何安全使用 PostAndReply 方法而不产生死锁的“模式”/最佳实践?
现在我遇到的问题是 PostAndAsyncReply 在处理 MailboxProcessor 后永远不会返回。使用超时参数不是一个选项,因为我等不及了(此外,选择合理的超时非常困难或不可能,因为它取决于太多的因素)。
[<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 在被处理时如何反应。不需要处理吗?
【问题讨论】:
标签: f# mailboxprocessor