Bagikan melalui


AsyncOperation Kelas

Definisi

Melacak masa pakai operasi asinkron.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Warisan
AsyncOperation

Contoh

Contoh kode berikut menunjukkan penggunaan AsyncOperation objek untuk melacak masa pakai operasi asinkron. Contoh kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk System.ComponentModel.AsyncOperationManager kelas .

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

Saat Anda menerapkan kelas sesuai dengan Gambaran Umum Pola Asinkron berbasis Peristiwa, Anda mungkin perlu melacak masa pakai setiap operasi asinkron yang dipanggil pada instans kelas Anda. Kelas AsyncOperation menyediakan cara untuk melacak dan melaporkan kemajuan tugas asinkron.

Daftar berikut mengidentifikasi cara untuk menggunakan AsyncOperation objek:

  • Untuk melaporkan kemajuan dan hasil sementara kepada klien, panggil Post dari kode pekerja asinkron Anda.

  • Untuk menunjukkan bahwa tugas asinkron telah selesai, atau untuk membatalkan tugas asinkron yang tertunda, panggil PostOperationCompleted.

Kelas Anda harus mendapatkan AsyncOperation objek untuk setiap tugas asinkron dengan memanggil AsyncOperationManager.CreateOperation saat setiap tugas dimulai. Untuk memungkinkan klien membedakan tugas asinkron terpisah, AsyncOperationManager.CreateOperation ambil parameter untuk token unik yang disediakan klien, yang menjadi UserSuppliedState properti . Kemudian dapat digunakan oleh kode klien untuk mengidentifikasi tugas asinkron tertentu yang meningkatkan peristiwa kemajuan atau penyelesaian.

Catatan Bagi Inheritor

Pelaksana harus memastikan PostOperationCompleted(SendOrPostCallback, Object) pemanggilan dan Post(SendOrPostCallback, Object) tidak sinkron, sehingga penyedia pustaka kelas tidak perlu khawatir dengan potensi luapan tumpukan jika mereka menganggap perilaku asinkron dalam model aplikasi tertentu yang kebetulan sinkron.

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

Properti

SynchronizationContext

SynchronizationContext Mendapatkan objek yang diteruskan ke konstruktor.

UserSuppliedState

Mendapatkan atau mengatur objek yang digunakan untuk mengidentifikasi operasi asinkron secara unik.

Metode

Equals(Object)

Menentukan apakah objek yang ditentukan sama dengan objek saat ini.

(Diperoleh dari Object)
Finalize()

Menyelesaikan operasi asinkron.

GetHashCode()

Berfungsi sebagai fungsi hash default.

(Diperoleh dari Object)
GetType()

Mendapatkan dari instans Type saat ini.

(Diperoleh dari Object)
MemberwiseClone()

Membuat salinan dangkal dari saat ini Object.

(Diperoleh dari Object)
OperationCompleted()

Mengakhiri masa pakai operasi asinkron.

Post(SendOrPostCallback, Object)

Memanggil delegasi pada utas atau konteks yang sesuai untuk model aplikasi.

PostOperationCompleted(SendOrPostCallback, Object)

Mengakhiri masa pakai operasi asinkron.

ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Berlaku untuk

Lihat juga