MailboxProcessor.Start<'Msg> Yöntemi (F#)
Bir aracıyı oluşturur ve başlatır.
Ad alanı/modül yol: Microsoft.FSharp.Control
Derleme: FSharp.Core (FSharp.Core.dll),
// Signature:
static member Start : (MailboxProcessor<'Msg> -> Async<unit>) * ?CancellationToken -> MailboxProcessor<'Msg>
// Usage:
MailboxProcessor.Start (body)
MailboxProcessor.Start (body, cancellationToken = cancellationToken)
Parametreler
body
Type: MailboxProcessor<'Msg> -> Async<unit>İşlev için okuma döngüsü olarak yürütülen bir zaman uyumsuz hesaplaması üretmek için MailboxProcessor , Start olarak adlandırılır.
cancellationToken
Türü: CancellationTokenbody için isteğe bağlı iptal belirteci. Varsayılan değer Async.DefaultCancellationToken.
Dönüş Değeri
Oluşturulan MailboxProcessor.
Notlar
body işlevi, aracı tarafından yürütülen zaman uyumsuz hesaplamayı oluşturmak için kullanılır.
Örnek
Aşağıdaki kod örneği, bir posta kutusu işlemci Aracısı Başlat gösterilmiştir. Bu örnekte, bir ileti sırası konsoldan giriş metnin her satırının deftere nakledilir. Program, her iletiyi okur ve bir yanıt kanalı kullanarak yanıtlar. "Dur" özel ileti alındığında, Dur yanıt gönderilir ve programından çıkar.
open System
type Message = string * AsyncReplyChannel<string>
let formatString = "Message number {0} was received. Message contents: {1}"
let printThreadId note =
// Append the thread ID.
printfn "%d : %s" System.Threading.Thread.CurrentThread.ManagedThreadId note
let agent = MailboxProcessor<Message>.Start(fun inbox ->
let rec loop n =
async {
let! (message, replyChannel) = inbox.Receive();
printThreadId "MailboxProcessor"
if (message = "Stop") then
replyChannel.Reply("Stopping.")
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 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()
printfn "Press Enter to continue."
Console.ReadLine() |> ignore
Aşağıdaki örnek bir oturumdur.
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