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.
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 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2
Información de versiones
Runtime de F#
Se admite en las versiones: 2.0, 4.0
Silverlight
Se admite en la versión: 3
Vea también
Referencia
Microsoft.FSharp.Control (Espacio de nombres de F#)
Historial de cambios
Fecha |
Historial |
Motivo |
|---|---|---|
|
Julio de 2010 |
Se ha agregado un ejemplo de código. |
Mejora de la información. |