Udostępnij za pośrednictwem


AsyncOperationManager Klasa

Definicja

Zapewnia zarządzanie współbieżnością dla klas, które obsługują wywołania metod asynchronicznych. Klasa ta nie może być dziedziczona.

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

Przykłady

Poniższy przykład kodu przedstawia użycie AsyncOperationManager klasy do utworzenia klasy obsługującej operacje asynchroniczne dla dowolnego modelu aplikacji. Pokazano w nim, jak zaimplementować klasę, która testuje liczbę w celu określenia, czy jest ona pierwszoliczna. To obliczenie może być czasochłonne, więc odbywa się to w osobnym wątku. Raporty o postępach, 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, 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

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ą. Jednym z nich jest zapewnienie, że programy obsługi zdarzeń są wywoływane w wątku lub kontekście odpowiednim dla modelu aplikacji (na przykład Windows Forms aplikacje, aplikacje ASP.NET, aplikacje konsolowe itd.). Zapewnia AsyncOperationManager 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ę , która zwraca wartość System.ComponentModel.AsyncOperation , CreateOperationktóra 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 powiadamiania klientów o 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 wzorca asynchronicznego opartego na zdarzeniach.

Właściwości

SynchronizationContext

Pobiera lub ustawia kontekst synchronizacji dla operacji asynchronicznej.

Metody

CreateOperation(Object)

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

Dotyczy

Zobacz też