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 içinde)
// Signature:
member this.TryReceive : ?int -> Async<'Msg option>
// Usage:
mailboxProcessor.TryReceive ()
mailboxProcessor.TryReceive (timeout = timeout)
Parametreler
timeout
Aşağıdakini yazın: 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 iletiyi döndürür veya None zaman aşımı aşılırsa.
Açıklamalar
Bu yöntem aracının gövdesi içinde kullanılır. Döndürür None bir zaman aşımı verilir ve zaman aşımı ortaya. 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 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2
Sürüm Bilgisi
F# Çalışma Zamanı
Desteklenir: 2.0, 4.0
Silverlight
Desteklenir: 3
Ayrıca bkz.
Başvuru
Control.MailboxProcessor<'Msg> Sınıfı (F#)
Microsoft.FSharp.Control İsim Uzayı (F#)
Değişiklik Geçmişi
Tarih |
Geçmiş |
Nedeni |
---|---|---|
Ocak 2011 |
Eklenen kod örneği. |
Bilgi geliştirme. |