Bagikan melalui


AsyncOperationManager.CreateOperation(Object) Metode

Definisi

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.

Berlaku untuk

Lihat juga