MailboxProcessor.Start<'Msg> Method (F#)
Visual Studio 2012
Creates and starts an agent.
Namespace/Module Path: Microsoft.FSharp.Control
Assembly: FSharp.Core (in FSharp.Core.dll)
// Signature: static member Start : (MailboxProcessor<'Msg> -> Async<unit>) * ?CancellationToken -> MailboxProcessor<'Msg> // Usage: MailboxProcessor.Start (body) MailboxProcessor.Start (body, cancellationToken = cancellationToken)
The created MailboxProcessor.
The following code example shows how to start a mailbox processor agent. In this example, each line of input from the console is posted to a message queue. The program reads each message and replies by using a reply channel. When the special message "Stop" is received, the Stop reply is sent and the program exits.
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
Following is an example session.
Mailbox Processor Test Type some text and press Enter to submit a message. Type 'Stop' to close the program. > hello 1 : Console loop 4 : mailboxProcessor Reply: Message number 0 was received. Message contents: hello > testing 1 : Console loop 3 : mailboxProcessor Reply: Message number 1 was received. Message contents: testing > hello? 1 : Console loop 4 : mailboxProcessor Reply: Message number 2 was received. Message contents: hello? > testing 1 2 3 1 : Console loop 3 : mailboxProcessor Reply: Message number 3 was received. Message contents: testing 1 2 3 > Stop 1 : Console loop 4 : mailboxProcessor Press Enter to continue.