Async.StartChild<'T>-Methode (F#)
Startet eine untergeordnete Berechnung in einem asynchronen Workflow.Dies ermöglicht die gleichzeitige Ausführung mehrerer asynchroner Berechnungen.
Namespace/Modulpfad: 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)
Parameter
computation
Typ: Async<'T>Die untergeordnete Berechnung.
millisecondsTimeout
Typ: intDer Timeoutwert in Millisekunden.Wenn 1 nicht zur Verfügung gestellt wird, beträgt der Standardwert -1, was Infinite entspricht.
Rückgabewert
Eine neue Berechnung, die auf den Abschluss der Eingabeberechnung wartet.
Hinweise
Diese Methode sollte normalerweise als die unmittelbare rechte Seite einer let!-Bindung in einem asynchronen Workflow verwendet werden:
async {
...
let! completor1 = childComputation1
|> Async.StartChild
let! completor2 = childComputation2
|> Async.StartChild
...
let! result1 = completor1
let! result2 = completor2
... }
Bei dieser Verwendung startet jede Verwendung von StartChild eine Instanz von childComputation und gibt ein completor-Objekt zurück, das eine Berechnung darstellt, die auf den Abschluss der Operation warten soll.Bei der Ausführung wartet completor auf den Abschluss von childComputation.
Beispiel
Das folgende Codebeispiel veranschaulicht die Verwendung von 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)
Beispielausgabe
Die Ausgabe überlappt sich, da die Aufträge gleichzeitig ausgeführt werden.
Plattformen
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Versionsinformationen
F#-Kern-Bibliotheks-Versionen
Unterstützt in: 2,0, 4,0, portablen