Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Crea e inicia un agente.
Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Control
Ensamblado: FSharp.Core (en FSharp.Core.dll)
// Signature:
static member Start : (MailboxProcessor<'Msg> -> Async<unit>) * ?CancellationToken -> MailboxProcessor<'Msg>
// Usage:
MailboxProcessor.Start (body)
MailboxProcessor.Start (body, cancellationToken = cancellationToken)
Parámetros
body
Tipo: MailboxProcessor<'Msg> -> Async<unit>Función para generar un cálculo asincrónico que se ejecutará como el bucle de lectura para MailboxProcessor cuando se llame a Start.
cancellationToken
Tipo: CancellationTokenToken de cancelación opcional para body.El valor predeterminado es Async.DefaultCancellationToken.
Valor devuelto
MailboxProcessor creado.
Comentarios
La función body se usa para generar el cálculo asincrónico ejecutado por el agente.
Ejemplo
En el ejemplo de código siguiente se muestra cómo iniciar un agente del procesador del buzón.En este ejemplo, cada línea de entrada de la consola se envía a una cola de mensajes.El programa lee cada mensaje y responde utilizando un canal de respuesta.Cuando se recibe el mensaje especial “Detener”, se envía la respuesta Detener y el programa se cierra.
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 continuación, se muestra una sesión de ejemplo.
Plataformas
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Información de versiones
Versiones de la biblioteca básica de F#
Se admite en: 2.0, 4.0, portables