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
W poniższym przykładzie kodu pokazano użycie AsyncOperation obiektu do śledzenia okresu istnienia operacji asynchronicznych. Ten przykład kodu jest częścią większego przykładu udostępnionego dla klasy System.ComponentModel.AsyncOperationManager.
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",
nameof(taskId));
}
userStateToLifetime[taskId] = asyncOp;
}
// Start the asynchronous operation.
WorkerEventHandler workerDelegate = new(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 Post kod procesu roboczego asynchronicznego.
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 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.
Notatki dotyczące dziedziczenia
Implementatory muszą upewnić PostOperationCompleted(SendOrPostCallback, Object) się, że wywołania i Post(SendOrPostCallback, Object) są asynchroniczne, aby dostawcy bibliotek klas nie musieli martwić się potencjalnymi przepełnieniami 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
| Nazwa | Opis |
|---|---|
| SynchronizationContext |
SynchronizationContext Pobiera obiekt przekazany do konstruktora. |
| UserSuppliedState |
Pobiera lub ustawia obiekt używany do unikatowego identyfikowania operacji asynchronicznej. |
Metody
| Nazwa | Opis |
|---|---|
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
| Finalize() |
Finalizuje operację asynchroniczną. |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (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) |