Condividi tramite


Metodo Async.StartChild<'T> (F#)

Avvia l'esecuzione di un calcolo figlio all'interno di un flusso di lavoro asincrono.Questo metodo consente l'esecuzione simultanea di più calcoli asincroni.

Percorso spazio dei nomi/modulo: Microsoft.FSharp.Control

Assembly: FSharp.Core (in FSharp.Core.dll)

// Signature:
static member StartChild : Async<'T> * ?int -> Async<Async<'T>>

// Usage:
Async.StartChild (computation)
Async.StartChild (computation, millisecondsTimeout = millisecondsTimeout)

Parametri

  • computation
    Tipo: Async<'T>

    Il calcolo figlio.

  • millisecondsTimeout
    Tipo: int

    Valore di timeout in millisecondi.Se non viene specificato alcun timeout, verrà utilizzato il valore predefinito di -1 che corrisponde a Infinite.

Valore restituito

Un nuovo calcolo in attesa del completamento del calcolo passato in input.

Note

Il metodo deve in genere essere utilizzato subito a destra di un'associazione let! in un flusso di lavoro asincrono F#, ovvero:

 async { 
    ...
    let! completor1 = childComputation1
    |> Async.StartChild
    let! completor2 = childComputation2
    |> Async.StartChild
    ... 
    let! result1 = completor1
    let! result2 = completor2
     ... }

Se utilizzato in questo modo, ogni utilizzo di StartChild avvierà un'istanza di childComputation e restituirà un oggetto completor che rappresenta un calcolo in attesa del completamento dell'operazione.Se eseguito, completor attenderà il completamento di childComputation.

Esempio

Nell'esempio di codice seguente viene illustrato l'utilizzo di 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)

Esempio di output

L'output è interfogliato perché i processi sono in esecuzione contemporaneamente.

  
  
  

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

Vedere anche

Riferimenti

Classe Control.Async (F#)

Spazio dei nomi Microsoft.FSharp.Control (F#)