AsyncOperationManager.CreateOperation(Object) Metode
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.
Mengembalikan AsyncOperation untuk melacak durasi operasi asinkron tertentu.
public:
static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation (object userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation (object? userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation
Parameter
- userSuppliedState
- Object
Objek yang digunakan untuk mengaitkan bagian status klien, seperti ID tugas, dengan operasi asinkron tertentu.
Mengembalikan
Yang AsyncOperation dapat Anda gunakan untuk melacak durasi pemanggilan metode asinkron.
Contoh
Contoh kode berikut menunjukkan menggunakan CreateOperation metode untuk membuat System.ComponentModel.AsyncOperation untuk melacak durasi operasi asinkron. Contoh kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk AsyncOperationManager kelas .
// 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
Metode ini CreateOperation mengembalikan System.ComponentModel.AsyncOperation yang dapat Anda gunakan untuk melacak durasi operasi asinkron tertentu dan untuk memperingatkan model aplikasi saat operasi selesai. Anda juga dapat menggunakannya untuk memposting pembaruan kemajuan dan hasil inkremental tanpa mengakhiri operasi. System.ComponentModel.AsyncOperation akan dengan benar melakukan marsekal panggilan ini ke utas atau konteks yang sesuai untuk model aplikasi.
Jika Anda menerapkan kelas yang mendukung Pola Asinkron berbasis Peristiwa, kelas Anda harus memanggil CreateOperation setiap kali metode MethodNameAsync
Anda dipanggil. Aplikasi klien yang melakukan panggilan ke metode dapat menggunakan userSuppliedState
parameter untuk mengidentifikasi setiap pemanggilan secara unik, sehingga membedakan peristiwa yang diangkat selama eksekusi operasi asinkron.
Perhatian
Kode klien harus memberikan nilai unik untuk userSuppliedState
parameter . ID tugas yang tidak unik dapat menyebabkan implementasi Anda melaporkan kemajuan dan peristiwa lain dengan tidak benar. Kode Anda harus memeriksa ID tugas yang tidak unik dan melemparkan System.ArgumentException jika terdeteksi.
Kode Anda harus melacak setiap System.ComponentModel.AsyncOperation yang dikembalikan oleh CreateOperation dan menggunakan objek dalam operasi asinkron yang mendasar yang sesuai untuk memposting pembaruan dan mengakhiri operasi. Pelacakan ini bisa sesinggah meneruskan System.ComponentModel.AsyncOperation sebagai parameter di antara delegasi. Dalam desain yang lebih canggih, kelas Anda dapat mempertahankan kumpulan System.ComponentModel.AsyncOperation objek, menambahkan objek saat tugas dimulai dan menghapusnya saat tugas selesai atau dibatalkan. Pendekatan ini memungkinkan Anda untuk memeriksa nilai parameter unik userSuppliedState
, dan merupakan metode yang harus Anda gunakan saat bekerja dengan kelas yang mendukung beberapa pemanggilan bersamaan.
Untuk informasi selengkapnya tentang menerapkan kelas asinkron, lihat Menerapkan Pola Asinkron berbasis Peristiwa.