:MailboxProcessor.PostAndReply tasarım seçimi
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
ben imza benim için çok sezgilere görünüyor nedenini anlamaya olamaz. Yapmak istediğimiz, bir acenteye mesaj yollamak ve bir cevap beklemek. Neden ona 'mesaj' olarak garip bir işlev vermeliyiz?
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()
Doğrusu böyle bir şey tercih ediyorum:
yine bu MSDN ön bilgi
member this.PostAndReply : 'Msg * ?int -> 'Reply
Teşekkür
Tamam teşekkürler, bkz. - additionnally ajanın vücuda (> 'Msg' 'AsyncReplyChannel <'Reply>) bir AsyncReplyChannel gelen bir iletiyi oluşturur bir işlevi: Ben olsaydım, ben yapıcı içinde ek bir parametre gerektirirdi. Nitekim, bakış kullanıcı odaklı bir noktadan, insanların daha az jenerik, buna rağmen 'PostAndReply' çağrılırken bir cevap kanalından gelen bir msj oluşturmak için farklı yollar tanıtmak istiyorum neden göremiyorum. – Okay
@Okay - Bu da işe yaramazdı.AsyncReplyChannel'i içeren "Msg" değerlerini yapılandırmanın farklı yollarına sahip olmak oldukça yaygındır. Örneğin, engelleme kuyruğu aracısı (bkz. MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx), her ikisi de bir yanıt kanalı taşıyan iki farklı iletiye sahiptir ve böylece iletiyi oluşturmanın iki yolu vardır . Bu, imzanın oldukça kafa karıştırıcı olduğunu kabul ediyorum. Daha okunabilir bir alternatife sahip olmak güzel olurdu, ama bunun ne olabileceğini düşünemiyorum. –