Sdílet prostřednictvím


MailboxProcessor.TryReceive < "Msg > Metoda (F#)

Čeká na zprávu.Tato první zpráva v pořadí doručení spotřebuje.

Cesta k oboru názvů nebo modul: Microsoft.FSharp.Control

Sestavení: FSharp.Core (v FSharp.Core.dll)

// Signature:
member this.TryReceive : ?int -> Async<'Msg option>

// Usage:
mailboxProcessor.TryReceive ()
mailboxProcessor.TryReceive (timeout = timeout)

Parametry

  • timeout
    Typ: int

    Volitelné časový limit v milisekundách.Výchozí hodnotu -1, který odpovídá Infinite.

Vrácená hodnota

Asynchronní výpočtu (asynchronní objektu), který vrací přijaté zprávy nebo None Pokud limitu.

Poznámky

Tato metoda je pro použití v rámci těla agent.Vrátí None Pokud je dán časového limitu a limitu.Tato metoda je pro použití v rámci těla agent.Každý agent může být maximálně jeden Čtenář souběžné aktivní, tak více než jeden souběžných volání příjem, TryReceive, prohledávání nebo TryScan může být aktivní.

Příklad

Následující příklad ukazuje použití TryReceive.Pokud zprávu neobdrží během 10 sekund, časový limit a ID zprávy zvýší 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

Následuje ukázka relace.Všimněte si, že číslo 2 je vynechána z časový limit.

  
  
  
  
  
  

Platformy

Windows 8, Windows 7, Windows Server 2012 Windows Server 2008 R2

Informace o verzi

F# základní verze knihovny

Podporovány: 2.0, 4.0, přenosné

Viz také

Referenční dokumentace

Control.MailboxProcessor < "Msg > Třídy (F#)

Obor názvů Microsoft.FSharp.Control (F#)