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.

İsim Uzayı/Modül Yolu: Microsoft.FSharp.Control

Derleme FSharp.Core (FSharp.Core.dll içinde)

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

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

Parametreler

  • computation
    Tür: Async<'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.

Açıklamalar

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 birini kullanın StartChild örneğini başlatır childComputation ve bir completor nesneyi gösteren bir hesaplama beklenecek tamamlama işlemi. Ç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 7, Windows Vista SP2, Windows XP SP3, Windows XP x64 SP2, Windows Server 2008 R2, Windows Server 2008 SP2, Windows Server 2003 SP2

Sürüm Bilgisi

F# Çalışma Zamanı

Desteklenir: 2.0, 4.0

Silverlight

Desteklenir: 3

Ayrıca bkz.

Başvuru

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

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

Değişiklik Geçmişi

Tarih

Geçmiş

Nedeni

Temmuz 2010

Eklenen kod örneği.

Bilgi geliştirme.