Aracılığıyla paylaş


Async.StartChild<'T> Yöntemi (F#)

Zaman uyumsuz iş akışı içinden çocuk hesaplamayı başlatır. Bu, birden çok zaman uyumsuz hesaplamanın eşzamanlı olarak yürütülmesini sağlar.

Ad alanı/modül yol: Microsoft.FSharp.Control

Derleme: FSharp.Core (FSharp.Core.dll),

// Signature:
static member StartChild : Async<'T> * ?int -> Async<Async<'T>>

// Usage:
Async.StartChild (computation)
Async.StartChild (computation, millisecondsTimeout = millisecondsTimeout)

Parametreler

  • computation
    Türü: zaman uyumsuz<'T>

    Alt hesaplama.

  • millisecondsTimeout
    Türü: int

    Milisaniye cinsinden zaman aşımı değeri. Eğer sağlanmadıysa, Infinite'e karşılık gelen varsayılan değer -1'dir.

Dönüş Değeri

Giriş hesaplamasının bitmesini bekleyen yeni bir hesaplama.

Notlar

Bu yöntem normal olarak F# zaman uyumsuz iş akışında let! bağlamasının immediate sağ tarafınında kullanılmalıdır yani:

 async { 
    ...
    let! completor1 = childComputation1
    |> Async.StartChild
    let! completor2 = childComputation2
    |> Async.StartChild
    ... 
    let! result1 = completor1
    let! result2 = completor2
     ... }

Bu şekilde kullanıldığında, her kullanımı StartChild bir örneğini başlatır childComputation ve döndüren bir completor bir hesaplama işlemi tamamlama için beklenecek temsil eden nesne. Çalıştırıldığında, completor tamamlanmasını bekler childComputation.

Örnek

Aşağıdaki kod örneği kullanımları gösterilmektedir 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)

Örnek Çıktı

İşleri aynı anda çalıştırdığınız için çıktı Aralanmış.

  
  
  

Platformlar

Windows 8, Windows 7, Windows Server 2012, Windows Server 2008 R2

Sürüm Bilgisi

F# Çekirdek Kitaplığı sürümleri

Desteklenen: 2.0, 4.0, Portable

Ayrıca bkz.

Başvuru

Control.Async Sınıfı (F#)

Microsoft.FSharp.Control İsim Uzayı (F#)