AsyncOperationManager Klasa

Definicja

Zapewnia zarządzanie współbieżnością dla klas, które obsługują wywołania metod asynchronicznych. Tej klasy nie można dziedziczyć.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Dziedziczenie
AsyncOperationManager

Przykłady

W poniższym przykładzie AsyncOperationManager kodu pokazano użycie klasy do utworzenia klasy obsługującej operacje asynchroniczne dla dowolnego modelu aplikacji. Pokazuje on, jak zaimplementować klasę, która testuje liczbę w celu określenia, czy jest ona główną. To obliczenie może być czasochłonne, więc odbywa się to w osobnym wątku. Raporty postępu, wyniki przyrostowe i powiadomienia o zakończeniu są obsługiwane przez klasę AsyncOperation , co gwarantuje, że programy obsługi zdarzeń klienta są wywoływane we właściwym wątku lub kontekście.

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

Jeśli klasa musi zapewnić zachowanie asynchroniczne zgodnie z omówieniem asynchronicznego wzorca opartego na zdarzeniach, napotkasz szereg problemów z zarządzaniem współbieżnością. Wśród nich jest wymóg zapewnienia, że programy obsługi zdarzeń są wywoływane w wątku lub kontekście odpowiednim dla modelu aplikacji (na przykład Windows Forms aplikacji, aplikacji ASP.NET, aplikacji konsolowych itd.). AsyncOperationManager zapewnia wygodny sposób tworzenia klasy, która działa prawidłowo we wszystkich modelach aplikacji obsługiwanych przez .NET Framework.

Klasa AsyncOperationManager ma jedną metodę , CreateOperationktóra zwraca element System.ComponentModel.AsyncOperation , który może służyć do śledzenia czasu trwania określonego zadania asynchronicznego. Element System.ComponentModel.AsyncOperation dla zadania może służyć do zgłaszania alertów klientom po zakończeniu zadania. Można go również użyć do publikowania aktualizacji postępu i przyrostowych wyników bez kończenia operacji.

Aby uzyskać więcej informacji na temat implementowania klas asynchronicznych, zobacz Implementowanie asynchronicznego wzorca opartego na zdarzeniach.

Właściwości

Nazwa Opis
SynchronizationContext

Pobiera lub ustawia kontekst synchronizacji dla operacji asynchronicznej.

Metody

Nazwa Opis
CreateOperation(Object)

Zwraca element AsyncOperation do śledzenia czasu trwania określonej operacji asynchronicznej.

Dotyczy

Zobacz też