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 : intValeur 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 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Informations de version
Versions de bibliothèque principale F#
Prise en charge dans : 2,0, 4,0, portables