Partilhar via


AsyncOperationManager Classe

Definição

Fornece gerenciamento de simultaneidade para classes que oferecem suporte a chamadas de método assíncrono. Essa classe não pode ser herdada.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Herança
AsyncOperationManager

Exemplos

O exemplo de código a seguir demonstra como usar a AsyncOperationManager classe para criar uma classe que dá suporte a operações assíncronas para qualquer modelo de aplicativo. Ele mostra como implementar uma classe que testa um número para determinar se ele é primo. Esse cálculo pode ser demorado, portanto, é feito em um thread separado. Relatórios de progresso, resultados incrementais e notificações de conclusão são tratados pela classe , o AsyncOperation que garante que os manipuladores de eventos do cliente sejam chamados no thread ou contexto adequado.

Para obter uma listagem de código completa, consulte Como implementar um componente que dá suporte ao padrão assíncrono baseado em evento. Para obter uma listagem de código completa de um formulário de cliente, consulte Como implementar um cliente do padrão assíncrono baseado em evento.

// 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

Comentários

Se sua classe precisar fornecer um comportamento assíncrono de acordo com a Visão geral do padrão assíncrono baseado em evento, você encontrará uma série de problemas de gerenciamento de simultaneidade. Entre eles está o requisito para garantir que os manipuladores de eventos sejam chamados em um thread ou contexto apropriado para o modelo de aplicativo (por exemplo, Windows Forms aplicativos, aplicativos ASP.NET, aplicativos de console e assim por diante). O AsyncOperationManager fornece uma maneira conveniente de criar uma classe que é executada corretamente em todos os modelos de aplicativo compatíveis com o .NET Framework.

A AsyncOperationManager classe tem um método, CreateOperation, que retorna um System.ComponentModel.AsyncOperation que pode ser usado para acompanhar a duração de uma tarefa assíncrona específica. O System.ComponentModel.AsyncOperation para uma tarefa pode ser usado para alertar os clientes quando uma tarefa é concluída. Ele também pode ser usado para postar atualizações de progresso e resultados incrementais sem encerrar a operação.

Para obter mais informações sobre como implementar classes assíncronas, consulte Implementando o padrão assíncrono baseado em evento.

Propriedades

SynchronizationContext

Obtém ou define o contexto de sincronização para a operação assíncrona.

Métodos

CreateOperation(Object)

Retorna um AsyncOperation para acompanhar a duração de uma operação assíncrona específica.

Aplica-se a

Confira também