:MailboxProcessor.PostAndReplyの設計上の選択
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
署名が私にはとても直感的に見える理由を私は理解することはできません。私たちがしたいことは、エージェントにメッセージを投稿し、返信を待つことです。 なぜ「メッセージ」として彼に奇妙な機能を与えなければならないのですか?
このMSDNスニペットを再度参照してください:
let rec loop() =
printf "> "
let input = Console.ReadLine()
printThreadId("Console loop")
let reply = agent.PostAndReply(fun replyChannel -> input, replyChannel)
if (reply <> "Stopping.") then
printfn "Reply: %s" reply
loop()
else
()
loop()
私はむしろこのような何かを好むだろう:あなたはそれを見たときのおかげ
ありがとうございます。それが私の場合は、コンストラクタ内に、AsyncReplyChannel( 'AsyncReplyChannel <'Reply> - > 'Msg')からエージェント本体にメッセージを構成する追加のパラメータが必要でした。確かに、ユーザ中心の観点から、私は 'PostAndReply'を呼び出すときに返信チャンネルからmsgを構築するためにさまざまな方法を導入したいのですが、それは一般的ではありません。 – Okay
@おかず - それはうまくいかないでしょう。'AsyncReplyChannel'を含む' 'Msg'値を構築する方法はいろいろあります。たとえば、ブロッキングキューエージェント(MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx参照)には、応答チャネルを持つ2つの異なるメッセージがあり、メッセージを構成する方法は2つあります。 しかし、私は署名がかなり混乱していることに同意します。読みやすい選択肢があるのはいいですが、私はそれが何であるか考えることはできません... –