Metodo Async.StartChild<'T> (F#)
Avvia l'esecuzione di un calcolo figlio all'interno di un flusso di lavoro asincrono.Questo metodo consente l'esecuzione simultanea di più calcoli asincroni.
Percorso spazio dei nomi/modulo: 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)
Parametri
computation
Tipo: Async<'T>Il calcolo figlio.
millisecondsTimeout
Tipo: intValore di timeout in millisecondi.Se non viene specificato alcun timeout, verrà utilizzato il valore predefinito di -1 che corrisponde a Infinite.
Valore restituito
Un nuovo calcolo in attesa del completamento del calcolo passato in input.
Note
Il metodo deve in genere essere utilizzato subito a destra di un'associazione let! in un flusso di lavoro asincrono F#, ovvero:
async {
...
let! completor1 = childComputation1
|> Async.StartChild
let! completor2 = childComputation2
|> Async.StartChild
...
let! result1 = completor1
let! result2 = completor2
... }
Se utilizzato in questo modo, ogni utilizzo di StartChild avvierà un'istanza di childComputation e restituirà un oggetto completor che rappresenta un calcolo in attesa del completamento dell'operazione.Se eseguito, completor attenderà il completamento di childComputation.
Esempio
Nell'esempio di codice seguente viene illustrato l'utilizzo di 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)
Esempio di output
L'output è interfogliato perché i processi sono in esecuzione contemporaneamente.
Piattaforme
Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2
Informazioni sulla versione
Versioni della libreria di base F#
Supportato in: 2,0, 4,0, portabile