12
综观: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()
我宁愿喜欢的东西是这样的:
member this.PostAndReply : 'Msg * ?int -> 'Reply
感谢
好的,谢谢,我明白了。如果是我,我会在构造函数中需要一个额外的参数:一个函数,该函数从AsyncReplyChannel('AsyncReplyChannel <'Reply> - >'Msg')构造一个消息,并附加到代理的主体。事实上,从用户为中心的角度来看,我不明白为什么人们会在调用'PostAndReply'时引入不同的方式来构建来自回复通道的msg,尽管它不是通用的。 – Okay 2012-02-29 15:50:32
@Okay - 这也行不通。有不同的方式来构建包含'AsyncReplyChannel'的'Msg'值是很常见的。例如,阻塞队列代理(请参阅MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx)具有两个不同的消息,这两个消息都携带一个回复通道,因此您有两种构建消息的方法。 这就是说,我同意签名很混乱。有更多可读的替代方案会很好,但我不能认为这可能是... – 2012-02-29 16:29:49