Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

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)

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.

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

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.

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.

            
              Début de tâche ComplParent.
            
            
              exécution eted.
            
            
              Début de tâche enfant : tarte de la tâche enfant slongoutput1.dat : fin des tâches enfants de longoutput2.dat : fin des tâches enfants de longoutput2.dat : fin parent du travail de longoutput1.dat.
            
          

Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Versions de bibliothèque principale F#

Prise en charge dans : 2,0, 4,0, portables

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft