MailboxProcessor が破棄された (または停止された) ときに PostAndAsyncReply をすぐに返すことは可能ですか? または、デッドロックを作成せずに PostAndReply メソッドを安全に使用する方法に関する「パターン」/ベストプラクティスはありますか?
現在、MailboxProcessor が破棄されたときに PostAndAsyncReply が返されないという問題があります。私は待つことができないので、タイムアウトパラメータを使用することはオプションではありません (また、あまりにも多くの要因に依存するため、合理的なタイムアウトを選択することは非常に困難または不可能です)。
[<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 がどのように反応するかについて説明していません。処分する必要はありませんか?