Udostępnij za pośrednictwem


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

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

Zobacz też

Informacje

Control.MailboxProcessor<'Msg> — Klasa (F#)

Microsoft.FSharp.Control — Przestrzeń nazw (F#)