Guardando:MailboxProcessor.PostAndReply progettazione scelta
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
non riesco a capire perché la firma sembra così intuitivo per me. Quello che vogliamo fare è postare un messaggio a un agente e aspettare una risposta. Perché dobbiamo dargli una strana funzione di 'messaggio'?
rivedere questo frammento di codice 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()
preferirei preferite qualcosa di simile:
member this.PostAndReply : 'Msg * ?int -> 'Reply
Grazie
Ok grazie, vedo. Se fossi stato io, avrei richiesto al costruttore un parametro aggiuntivo: una funzione che costruisce un messaggio da un AsyncReplyChannel ('AsyncReplyChannel <'Reply> -> 'Msg') addizionalmente al corpo dell'agente. Infatti, da un punto di vista incentrato sull'utente, non riesco a capire perché la gente vorrebbe introdurre modi diversi per costruire un messaggio da un canale di risposta, quando si chiama 'PostAndReply', anche se sarebbe meno generico. – Okay
@Okay - Non funzionerebbe neanche.È abbastanza comune avere diversi modi di costruire valori '' Msg' che contengono 'AsyncReplyChannel'. Ad esempio, l'agente della coda di blocco (vedi MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx) ha due messaggi diversi che hanno entrambi un canale di risposta e quindi hai due modi per costruire il messaggio . Detto questo, sono d'accordo sul fatto che la firma sia piuttosto confusa. Sarebbe bello avere un'alternativa più leggibile, ma non riesco a pensare a cosa potrebbe essere ... –