Async.StartChild<'T> (Método de F#)
Inicia un cálculo secundario en un flujo de trabajo asincrónico. Esto permite ejecutar simultáneamente varios cálculos asincrónicos.
Espacio de nombres/Ruta de acceso del módulo: Microsoft.FSharp.Control
Ensamblado: FSharp.Core (en FSharp.Core.dll)
// Signature:
static member StartChild : Async<'T> * ?int -> Async<Async<'T>>
// Usage:
Async.StartChild (computation)
Async.StartChild (computation, millisecondsTimeout = millisecondsTimeout)
Parámetros
computation
Tipo: Async<'T>Cálculo secundario.
millisecondsTimeout
Tipo: intValor del tiempo de espera, en milisegundos. Si no se proporciona ningún valor, se usará el valor predeterminado -1, el cual equivale a Infinite.
Valor devuelto
Nuevo cálculo que espera a que finalice el cálculo de entrada.
Comentarios
Este método se debe usar normalmente como el lado derecho inmediato de un enlace let! en un flujo de trabajo asincrónico de F#, es decir:
async {
...
let! completor1 = childComputation1
|> Async.StartChild
let! completor2 = childComputation2
|> Async.StartChild
...
let! result1 = completor1
let! result2 = completor2
... }
Cuando se usa de esta manera, cada uso de StartChild inicia una instancia de childComputation y devuelve un objeto completor que representa un cálculo que va a esperar a que se complete la operación. Cuando se ejecuta, el objeto completor espera a que se complete childComputation.
Ejemplo
En el siguiente ejemplo de código, se muestra el uso de Async.StartChild.
open System.Windows.Forms
let bufferData = Array.zeroCreate<byte> 100000000
let asyncChild filename =
async {
printfn "Child job start: %s" filename
use outputFile = System.IO.File.Create(filename)
do! outputFile.AsyncWrite(bufferData)
printfn "Child job end: %s " filename
}
let asyncParent =
async {
printfn "Parent job start."
let! childAsync1 = Async.StartChild(asyncChild "longoutput1.dat")
let! childAsync2 = Async.StartChild(asyncChild "longoutput2.dat")
let! result1 = childAsync1
let! result2 = childAsync2
printfn "Parent job end."
}
let form = new Form(Text = "Test Form")
let button = new Button(Text = "Start")
form.Controls.Add(button)
button.Click.Add(fun args -> Async.Start(asyncParent)
printfn "Completed execution." )
Application.Run(form)
Resultados del ejemplo
La salida se intercala porque los trabajos se ejecutan simultáneamente.
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