AsyncOperationManager.CreateOperation(Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zwraca element AsyncOperation do śledzenia czasu trwania określonej operacji asynchronicznej.
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
Parametry
- userSuppliedState
- Object
Obiekt używany do kojarzenia elementu stanu klienta, takiego jak identyfikator zadania, z określoną operacją asynchroniczną.
Zwraca
Element AsyncOperation , którego można użyć do śledzenia czasu trwania wywołania metody asynchronicznej.
Przykłady
W poniższym przykładzie kodu pokazano użycie CreateOperation metody do utworzenia obiektu System.ComponentModel.AsyncOperation do śledzenia czasu trwania operacji asynchronicznych. Ten przykład kodu jest częścią większego przykładu udostępnionego AsyncOperationManager dla klasy .
// 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
Uwagi
Metoda CreateOperation zwraca wartość System.ComponentModel.AsyncOperation , której można użyć do śledzenia czasu trwania określonej operacji asynchronicznej i alertu modelu aplikacji po zakończeniu operacji. Można go również używać do publikowania aktualizacji postępu i przyrostowych wyników bez kończenia operacji. Funkcja System.ComponentModel.AsyncOperation poprawnie przesłała te wywołania do odpowiedniego wątku lub kontekstu dla modelu aplikacji.
Jeśli zaimplementujesz klasę, która obsługuje asynchroniczny wzorzec oparty na zdarzeniach, klasa powinna wywołać CreateOperation metodę MethodName za każdym razem, gdy wywoływana jest metoda MethodNameAsync
. Aplikacja kliencka, która wykonuje wywołania metody, może użyć parametru userSuppliedState
, aby jednoznacznie zidentyfikować każde wywołanie, aby odróżnić zdarzenia zgłaszane podczas wykonywania operacji asynchronicznej.
Przestroga
Kod klienta musi podać unikatową wartość parametru userSuppliedState
. Identyfikatory zadań innych niż unikatowe mogą spowodować nieprawidłowe raportowanie postępu implementacji i innych zdarzeń. Kod powinien sprawdzić, czy nie jest unikatowy identyfikator zadania, i zgłosić System.ArgumentException , czy został wykryty.
Kod powinien śledzić każdy System.ComponentModel.AsyncOperation zwrócony przez CreateOperation program i używać obiektu w odpowiedniej operacji asynchronicznej bazowej w celu opublikowania aktualizacji i zakończenia operacji. To śledzenie może być tak proste, jak przekazanie parametru System.ComponentModel.AsyncOperation jako parametru wśród delegatów. W bardziej zaawansowanych projektach klasa może obsługiwać kolekcję System.ComponentModel.AsyncOperation obiektów, dodając obiekty podczas uruchamiania zadań i usuwając je po zakończeniu lub anulowaniu zadań. To podejście umożliwia sprawdzenie unikatowych userSuppliedState
wartości parametrów i jest metodą, której należy użyć podczas pracy z klasami obsługującymi wiele współbieżnych wywołań.
Aby uzyskać więcej informacji na temat implementowania klas asynchronicznych, zobacz Implementowanie wzorca asynchronicznego opartego na zdarzeniach.