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 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
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. |