Udostępnij za pośrednictwem


AsyncOperation Klasa

Definicja

Ś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)

Dotyczy

Zobacz też