AsyncOperation Klasa
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.
Śledzi okres istnienia operacji asynchronicznej.
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- Dziedziczenie
-
AsyncOperation
Przykłady
Poniższy przykład kodu przedstawia użycie AsyncOperation obiektu do śledzenia okresu istnienia operacji asynchronicznych. Ten przykład kodu jest częścią większego przykładu podanego System.ComponentModel.AsyncOperationManager dla klasy.
Aby uzyskać pełną listę kodu, zobacz How to: Implement a Component That Supports the Event-based Asynchronous Pattern (Instrukcje: implementowanie składnika obsługującego wzorzec asynchroniczny oparty na zdarzeniach). Aby uzyskać pełną listę kodu formularza klienta, zobacz How to: Implement a Client of the Event-based Asynchronous Pattern (Instrukcje: implementowanie klienta wzorca asynchronicznego opartego na zdarzeniach).
// 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
Podczas implementowania klasy zgodnie z omówieniem asynchronicznego wzorca opartego na zdarzeniach może być konieczne śledzenie okresu istnienia każdej operacji asynchronicznej wywoływanej na wystąpieniu klasy. Klasa AsyncOperation udostępnia sposoby śledzenia i raportowania postępu zadania asynchronicznego.
Poniższa lista identyfikuje sposoby używania AsyncOperation obiektu:
Aby zgłosić postęp i tymczasowe wyniki do klienta, wywołaj kod Post asynchronicznego procesu roboczego.
Aby wskazać, że zadanie asynchroniczne zostało ukończone lub anulować oczekujące zadanie asynchroniczne, wywołaj metodę PostOperationCompleted.
Klasa powinna uzyskać AsyncOperation obiekt dla każdego zadania asynchronicznego przez wywołanie AsyncOperationManager.CreateOperation podczas uruchamiania każdego zadania. Aby umożliwić klientowi odróżnienie oddzielnych zadań asynchronicznych, AsyncOperationManager.CreateOperation przyjmuje parametr dla unikatowego tokenu dostarczonego przez klienta, który staje się właściwością UserSuppliedState . Następnie może być używany przez kod klienta do identyfikowania określonego zadania asynchronicznego, które podnosi postęp lub zdarzenia ukończenia.
Uwagi dotyczące dziedziczenia
Implementatory muszą mieć pewność PostOperationCompleted(SendOrPostCallback, Object) , że wywołania i Post(SendOrPostCallback, Object) są asynchroniczne, aby dostawcy bibliotek klas nie musieli martwić się o potencjalne przepełnienia stosu, jeśli zakładają asynchroniczne zachowanie w konkretnym modelu aplikacji, który ma być synchroniczny.
Aby uzyskać więcej informacji na temat implementowania klas asynchronicznych, zobacz Implementowanie asynchronicznego wzorca opartego na zdarzeniach.
Właściwości
SynchronizationContext |
SynchronizationContext Pobiera obiekt przekazany do konstruktora. |
UserSuppliedState |
Pobiera lub ustawia obiekt używany do unikatowego identyfikowania operacji asynchronicznej. |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
Finalize() |
Finalizuje operację asynchroniczną. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
OperationCompleted() |
Kończy okres istnienia operacji asynchronicznej. |
Post(SendOrPostCallback, Object) |
Wywołuje delegata w wątku lub kontekście odpowiednim dla modelu aplikacji. |
PostOperationCompleted(SendOrPostCallback, Object) |
Kończy okres istnienia operacji asynchronicznej. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |