MailboxProcessor.TryReceive<'Msg> Yöntemi (F#)
Bir ileti için bekler. Bu varış sırasındaki ilk iletiyi tüketir.
Ad alanı/modül yolu: Microsoft.FSharp.Control
Derleme: FSharp.Core (FSharp.Core.dll),
// Signature:
member this.TryReceive : ?int -> Async<'Msg option>
// Usage:
mailboxProcessor.TryReceive ()
mailboxProcessor.TryReceive (timeout = timeout)
Parametreler
timeout
Türü: intİsteğe bağlı milisaniye cinsinden zaman aşımı. Infinite'e karşılık gelir ve varsayılan olarak -1'dir.
Dönüş Değeri
Zaman uyumsuz bir hesaplama (zaman uyumsuz nesnesi), alınan ileti verir ya da None zaman aşımı aşılması durumunda.
Notlar
Bu yöntem aracının gövdesi içinde kullanılır. İade None bir zaman aşımı verilir ve zaman aşımı süresini aştı. Bu yöntem aracının gövdesi içinde kullanılır. Her aracı için en fazla eşzamanlı bir okuyucu etkin olabilir bu nedenle birden fazla eş zamanlı çağrı Al, TryReceive, Tarama veya TryScan etkin olabilir.
Örnek
Aşağıdaki örnek, nasıl kullanılacağını gösterir TryReceive. Bir ileti 10 saniye içinde alınmazsa, ileti kimliği 1 artar ve bir zaman aşımı oluşur.
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
Örnek oturumunda aşağıdaki gibidir. İleti numarası 2 zaman aşımı nedeniyle atlanır dikkat edin.
Platformlar
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Sürüm Bilgisi
F# Çekirdek Kitaplığı sürümleri
Desteklenen: 2.0, 4.0, Portable