Freigeben über


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: int

    Der 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 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Versionsinformationen

F#-Runtime

Unterstützt in: 2.0, 4.0

Silverlight

Unterstützt in: 3

Siehe auch

Weitere Ressourcen

Control.Async-Klasse (F#)

Microsoft.FSharp.Control-Namespace (F#)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2010

Codebeispiel hinzugefügt.

Informationsergänzung.