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 di 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)

Output di esempio

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

        

Piattaforme

Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2.

Informazioni sulla versione

F# Runtime

Supportato in: 2.0, 4.0

Silverlight

Supportato in: 3

Vedere anche

Riferimenti

Classe Control.Async (F#)

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

Cronologia delle modifiche

Data

Cronologia

Motivo

Luglio 2010

Aggiunto esempio di codice.

Miglioramento delle informazioni.