Metodo MailboxProcessor.Start<'Msg> (F#)
Crea e avvia un agente.
Percorso spazio dei nomi/modulo: 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)
Parametri
body
Tipo: MailboxProcessor<'Msg> -> Async<unit>Funzione da utilizzare per generare un calcolo asincrono che verrà eseguito come ciclo di lettura per MailboxProcessor quando viene chiamato Start.
cancellationToken
Tipo: CancellationTokenToken di annullamento facoltativo per l'elemento body. Il valore predefinito è Async.DefaultCancellationToken.
Valore restituito
L'oggetto MailboxProcessor creato.
Note
La funzione body viene utilizzata per generare il calcolo asincrono eseguito dall'agente.
Esempio
Nell'esempio di codice riportato di seguito viene illustrato come avviare un agente del processore della cassetta postale. In questo esempio, ogni linea di input dalla console viene inserita in una coda di messaggi. Il programma legge ogni messaggio e risponde tramite un canale di risposta. Quando si riceve il messaggio speciale "Stop", viene inviata la risposta Stop e si chiude il programma.
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
Di seguito viene riportata una sessione di esempio.
Piattaforme
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Informazioni sulla versione
Versioni della libreria di base F#
Supportato in: 2,0, 4,0, portabile