Share via


AsyncOperationManager Kelas

Definisi

Menyediakan manajemen konkurensi untuk kelas yang mendukung panggilan metode asinkron. Kelas ini tidak dapat diwariskan.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Warisan
AsyncOperationManager

Contoh

Contoh kode berikut menunjukkan penggunaan AsyncOperationManager kelas untuk membuat kelas yang mendukung operasi asinkron untuk model aplikasi apa pun. Ini menunjukkan cara mengimplementasikan kelas yang menguji angka untuk menentukan apakah itu prima. Perhitungan ini bisa memakan waktu, sehingga dilakukan pada utas terpisah. Laporan kemajuan, hasil inkremental, dan pemberitahuan penyelesaian ditangani oleh AsyncOperation kelas , yang memastikan bahwa penanganan aktivitas klien dipanggil pada utas atau konteks yang tepat.

Untuk daftar kode lengkap, lihat Cara: Menerapkan Komponen yang Mendukung Pola Asinkron Berbasis Peristiwa. Untuk daftar kode lengkap formulir klien, lihat Cara: Menerapkan Klien Pola Asinkron Berbasis Peristiwa.

// This method starts an asynchronous calculation. 
// First, it checks the supplied task ID for uniqueness.
// If taskId is unique, it creates a new WorkerEventHandler 
// and calls its BeginInvoke method to start the calculation.
public virtual void CalculatePrimeAsync(
    int numberToTest,
    object taskId)
{
    // Create an AsyncOperation for taskId.
    AsyncOperation asyncOp =
        AsyncOperationManager.CreateOperation(taskId);

    // Multiple threads will access the task dictionary,
    // so it must be locked to serialize access.
    lock (userStateToLifetime.SyncRoot)
    {
        if (userStateToLifetime.Contains(taskId))
        {
            throw new ArgumentException(
                "Task ID parameter must be unique", 
                "taskId");
        }

        userStateToLifetime[taskId] = asyncOp;
    }

    // Start the asynchronous operation.
    WorkerEventHandler workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(
        numberToTest,
        asyncOp,
        null,
        null);
}
' This method starts an asynchronous calculation. 
' First, it checks the supplied task ID for uniqueness.
' If taskId is unique, it creates a new WorkerEventHandler 
' and calls its BeginInvoke method to start the calculation.
Public Overridable Sub CalculatePrimeAsync( _
    ByVal numberToTest As Integer, _
    ByVal taskId As Object)

    ' Create an AsyncOperation for taskId.
    Dim asyncOp As AsyncOperation = _
        AsyncOperationManager.CreateOperation(taskId)

    ' Multiple threads will access the task dictionary,
    ' so it must be locked to serialize access.
    SyncLock userStateToLifetime.SyncRoot
        If userStateToLifetime.Contains(taskId) Then
            Throw New ArgumentException( _
                "Task ID parameter must be unique", _
                "taskId")
        End If

        userStateToLifetime(taskId) = asyncOp
    End SyncLock

    ' Start the asynchronous operation.
    Dim workerDelegate As New WorkerEventHandler( _
        AddressOf CalculateWorker)

    workerDelegate.BeginInvoke( _
        numberToTest, _
        asyncOp, _
        Nothing, _
        Nothing)

End Sub

Keterangan

Jika kelas Anda perlu memberikan perilaku asinkron sesuai dengan Gambaran Umum Pola Asinkron Berbasis Peristiwa, Anda akan mengalami sejumlah masalah manajemen konkurensi. Di antaranya adalah persyaratan untuk memastikan bahwa penanganan aktivitas dipanggil pada utas atau konteks yang sesuai untuk model aplikasi (misalnya, aplikasi Formulir Windows, aplikasi ASP.NET, aplikasi konsol, dan sebagainya). AsyncOperationManager menyediakan cara mudah untuk membuat kelas yang berjalan dengan benar di bawah semua model aplikasi yang didukung oleh .NET Framework.

Kelas AsyncOperationManager memiliki satu metode, CreateOperation, yang mengembalikan yang System.ComponentModel.AsyncOperation dapat digunakan untuk melacak durasi tugas asinkron tertentu. System.ComponentModel.AsyncOperation untuk tugas dapat digunakan untuk memperingatkan klien ketika tugas selesai. Ini juga dapat digunakan untuk memposting pembaruan kemajuan dan hasil inkremental tanpa mengakhiri operasi.

Untuk informasi selengkapnya tentang menerapkan kelas asinkron, lihat Menerapkan Pola Asinkron Berbasis Peristiwa.

Properti

SynchronizationContext

Mendapatkan atau mengatur konteks sinkronisasi untuk operasi asinkron.

Metode

CreateOperation(Object)

Mengembalikan AsyncOperation untuk melacak durasi operasi asinkron tertentu.

Berlaku untuk

Lihat juga