Compartir a través de


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: int

    Valor 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

Vea también

Referencia

Control.Async (Clase de F#)

Microsoft.FSharp.Control (Espacio de nombres de F#)