MailboxProcessor.TryReceive<'Msg> — Metoda (F#)
Czeka na komunikat.Zajmie to pierwszą wiadomość w kolejności przybycia.
Przestrzeń nazw/Ścieżka modułu: Microsoft.FSharp.Control
Zestaw: FSharp.Core (w FSharp.Core.dll)
// Signature:
member this.TryReceive : ?int -> Async<'Msg option>
// Usage:
mailboxProcessor.TryReceive ()
mailboxProcessor.TryReceive (timeout = timeout)
Parametry
timeout
Wpisz: intOpcjonalny limit czasu zapisu w milisekundach.Ustaw domyślnie na -1, co odnosi się do Infinite.
Wartość zwracana
Asynchroniczne obliczenie (obiekt Async), które zwraca odebraną wiadomość lub None jeśli zostanie przekroczony limit czasu.
Uwagi
Ta metoda jest do użytku w ramach organu agenta.Zwraca None jeśli limit czasu jest podany i zostanie przekroczony limit czasu.Ta metoda jest do użytku w ramach organu agenta.Dla każdego agenta, co najwyżej jeden równoczesny czytnik może być aktywny, więc nie więcej niż jedno równoczesne wywołanie do Uzyskaj, TryReceive, Skan lub TryScan może być aktywne.
Przykład
Poniższy przykład ilustruje sposób używania metody TryReceive.Jeśli komunikat nie zostanie odebrany w ciągu 10 sekund, zostanie przekroczony limit czasu i identyfikator wiadomości zwiększa się o 1.
open System
type Message = string * AsyncReplyChannel<string>
let formatString = "Message number {0} was received. Message contents: {1}"
let agent = MailboxProcessor<Message>.Start(fun inbox ->
let rec loop n =
async {
let! opt = inbox.TryReceive(10000);
match opt with
| None -> do! loop(n + 1)
| Some (message, replyChannel) ->
// The delay gets longer with each message, and eventually triggers a timeout.
if (message = "Stop") then
replyChannel.Reply("Stop")
else
replyChannel.Reply(String.Format(formatString, n, message))
do! loop (n + 1)
}
loop 0)
printfn "Mailbox Processor Test"
printfn "Type some text and press Enter to submit a message."
printfn "Type 'Stop' to close the program."
let mutable isCompleted = false
while (not isCompleted) do
printf "> "
let input = Console.ReadLine()
let reply = agent.PostAndReply(fun replyChannel -> input, replyChannel)
if (reply <> "Stop") then
printfn "Reply: %s" reply
else
isCompleted <- true
printfn "Press Enter to continue."
Console.ReadLine() |> ignore
Następujące przykładowe sesji.Należy zauważyć, że wiadomość nr 2 jest pomijana, ze względu na limit czasu.
Platformy
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Informacje o wersji
Wersje podstawowe biblioteki języka F#
Obsługiwane przez: 2.0, 4.0, przenośne