Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

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: