Patrząc na:MailboxProcessor.PostAndReply wybór projektu
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
Nie mogę zrozumieć, dlaczego podpis wygląda tak intuicyjne do mnie. Chcemy wysłać wiadomość do agenta i czekać na odpowiedź. Dlaczego musimy dać mu dziwną funkcję "wiadomości"?
Zobacz kolejny fragment tej 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()
Wolałbym wolą coś takiego:
member this.PostAndReply : 'Msg * ?int -> 'Reply
Thanks
Ok dzięki, widzę. Gdyby to było ja, potrzebowałbym w konstruktorze dodatkowego parametru: funkcji, która konstruuje wiadomość z AsyncReplyChannel ('AsyncReplyChannel <'Reply> -> 'Msg') dodatkowo do ciała agenta. Rzeczywiście, z punktu widzenia użytkownika, nie rozumiem, dlaczego ludzie chcieliby wprowadzić różne sposoby budowania msg z kanału odpowiedzi, podczas wywoływania 'PostAndReply', choć byłoby to mniej ogólne. – Okay
@Okay - To też nie działa.Często zdarza się, że mają różne sposoby konstruowania wartości '' Msg', które zawierają 'AsyncReplyChannel'. Na przykład agent kolejki blokującej (zobacz MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx) ma dwa różne komunikaty, które przenoszą kanał odpowiedzi, więc masz dwa sposoby na utworzenie wiadomości . To powiedziawszy, zgadzam się, że podpis jest dość zagmatwany. Byłoby miło mieć bardziej czytelną alternatywę, ale po prostu nie mogę pomyśleć, co to może być ... –