AsyncOperationManager Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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. |