Partager via


Async.StartChild<'T>, méthode (F#)

Démarre un calcul enfant dans un flux de travail asynchrone. Cela permet d'exécuter plusieurs calculs asynchrones simultanément.

Espace de noms/Chemin du module : 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)

Paramètres

  • computation
    Type : Async<'T>

    Calcul enfant.

  • millisecondsTimeout
    Type : int

    Valeur du délai d'attente en millisecondes. Si aucune valeur n'est fournie, valeur par défaut -1, correspondant à Infinite.

Valeur de retour

Nouveau calcul qui attend que le calcul d'entrée se termine.

Notes

Cette méthode doit normalement être utilisée directement à droite d'une liaison let! dans un flux de travail asynchrone F#, autrement dit :

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

Dans ce cas, chaque utilisation de StartChild démarre une instance de childComputation et retourne un objet completor qui représente un calcul à attendre pour terminer l'opération. En cas d'exécution, le completor attend l'achèvement de childComputation.

Exemple

L'exemple de code suivant illustre l'utilisation 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)

Résultat de l'exemple

La sortie est entrelacée car les travaux s'exécutent simultanément.

        

Plateformes

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

Informations de version

Runtime F#

Pris en charge dans : 2.0, 4.0

Silverlight

Prise en charge dans : 3

Voir aussi

Référence

Control.Async, classe (F#)

Microsoft.FSharp.Control, espace de noms (F#)

Historique des modifications

Date

Historique

Motif

Juillet 2010

Ajout d'un exemple de code

Améliorations apportées aux informations.