Nhìn vào:MailboxProcessor.PostAndReply thiết kế lựa chọn
member this.PostAndReply : (AsyncReplyChannel<'Reply> -> 'Msg) * ?int -> 'Reply
Tôi không thể hiểu tại sao chữ ký trông rất phản trực giác đối với tôi. Những gì chúng tôi muốn làm là đăng một tin nhắn cho một đại lý và chờ trả lời. Tại sao chúng ta phải cho anh ta một chức năng kỳ lạ như một 'thông điệp'?
Xem lại đoạn này 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()
Tôi thà thích một cái gì đó như thế này:
member this.PostAndReply : 'Msg * ?int -> 'Reply
Cảm ơn
Ok cảm ơn, tôi hiểu. Nếu đó là tôi, tôi sẽ yêu cầu trong hàm tạo một tham số bổ sung: một hàm xây dựng một thông điệp từ một AsyncReplyChannel ('AsyncReplyChannel <'Reply> -> 'Msg') bổ sung vào phần thân của tác nhân. Thật vậy, từ quan điểm trung tâm của người dùng, tôi không hiểu tại sao mọi người muốn giới thiệu các cách khác nhau để xây dựng một msg từ một kênh trả lời, khi gọi 'PostAndReply', mặc dù nó sẽ ít chung chung hơn. – Okay
@Okay - Điều đó sẽ không hoạt động.Nó khá phổ biến khi có các cách khác nhau để xây dựng các giá trị ''Msg' chứa' AsyncReplyChannel'. Ví dụ, tác nhân xếp hàng chặn (xem MSDN http://msdn.microsoft.com/en-us/library/hh297096.aspx) có hai thông báo khác nhau mà cả hai đều mang một kênh trả lời và vì vậy bạn có hai cách để xây dựng thông điệp . Điều đó nói rằng, tôi đồng ý rằng chữ ký khá khó hiểu. Nó sẽ là tốt đẹp để có lựa chọn dễ đọc hơn, nhưng tôi chỉ không thể nghĩ rằng đó có thể là ... –