MailboxProcessor.Start<'Msg> — Metoda (F#)
Tworzy i uruchamia agenta.
Ścieżka obszaru nazw/modułu: Microsoft.FSharp.Control
Zgromadzenie: FSharp.Core (w FSharp.Core.dll)
// Signature:
static member Start : (MailboxProcessor<'Msg> -> Async<unit>) * ?CancellationToken -> MailboxProcessor<'Msg>
// Usage:
MailboxProcessor.Start (body)
MailboxProcessor.Start (body, cancellationToken = cancellationToken)
Parametry
body
Type: MailboxProcessor<'Msg> -> Async<unit>Funkcji w celu wygenerowania asynchronicznych obliczeń, który zostanie wykonany jako przeczytane pętli dla MailboxProcessor po Start jest wywoływana.
cancellationToken
Typ: CancellationTokenToken anulowania opcjonalne dla body.Wartością domyślną jest Async.DefaultCancellationToken.
Wartość zwracana
Utworzony MailboxProcessor.
Uwagi
body Funkcja jest używana do generowania asynchronicznego obliczenia wykonywane przez agenta.
Przykład
Poniższy przykład kodu pokazuje, jak uruchomić agenta procesora skrzynki pocztowej.W tym przykładzie każdy wiersz danych wejściowych z konsoli jest księgowana kolejki wiadomości.Program odczytuje każdej wiadomości i odpowiedzi przy użyciu kanał odpowiedzi.Po odebraniu wiadomości specjalne "Stop", jest wysyłana odpowiedź Stop i zamyka program.
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
Oto przykład sesji.
Platformy
Windows 8, Windows 7, Windows Server 2012 Windows Server 2008 R2
Informacje o wersji
F# Core wersji biblioteki
Obsługiwane: 2.0, 4.0, przenośne