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 di 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)
Output di esempio
L'output è interfogliato perché i processi sono in esecuzione contemporaneamente.
Piattaforme
Windows 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2.
Informazioni sulla versione
F# Runtime
Supportato in: 2.0, 4.0
Silverlight
Supportato in: 3
Vedere anche
Riferimenti
Spazio dei nomi Microsoft.FSharp.Control (F#)
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
---|---|---|
Luglio 2010 |
Aggiunto esempio di codice. |
Miglioramento delle informazioni. |