cuanto a:MailboxProcessor.PostAndReply opción de diseño
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
No puedo entender por qué la firma se ve tan contrario a la intuición para mí. Lo que queremos hacer es publicar un mensaje a un agente y esperar una respuesta. ¿Por qué tenemos que darle una función extraña como un 'mensaje'?
Véase de nuevo este fragmento de 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()
prefiero prefieren algo como esto:
member this.PostAndReply : 'Msg * ?int -> 'Reply
Gracias
Ok gracias, ya veo. Si fuera yo, habría requerido en el constructor un parámetro adicional: una función que construye un mensaje de un AsyncReplyChannel ('AsyncReplyChannel <'Reply> -> 'Msg') adicionalmente al cuerpo del agente. De hecho, desde un punto de vista centrado en el usuario, no veo por qué la gente quiere introducir diferentes formas de construir un mensaje de un canal de respuesta, cuando se llama a 'PostAndReply', aunque sería menos genérico. – Okay
@Okay - Eso tampoco funcionaría.Es bastante común tener diferentes formas de construir valores '' Msg' que contienen 'AsyncReplyChannel'. Por ejemplo, el agente de cola de bloqueo (consulte MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx) tiene dos mensajes diferentes que llevan un canal de respuesta, por lo que tiene dos formas de compilar el mensaje. . Dicho esto, estoy de acuerdo en que la firma es bastante confusa. Sería bueno tener una alternativa más legible, pero no puedo pensar qué podría ser eso ... –