AsyncOperationManager Classe

Definição

Fornece gestão de concorrência para classes que suportam chamadas de método assíncronas. Esta 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 seguinte demonstra a utilização da AsyncOperationManager classe para criar uma classe que suporta operações assíncronas para qualquer modelo de aplicação. Mostra como implementar uma classe que testa um número para determinar se é primo. Este cálculo pode ser demorado, por isso é feito numa thread separada. Relatórios de progresso, resultados incrementais e notificações de conclusão são tratados pela AsyncOperation classe, o que garante que os gestores de eventos do cliente são chamados no thread ou contexto adequados.

Para uma lista completa de código, veja Como: Implementar um Componente que Suporta o Padrão Assíncrono Baseado em Eventos. Para uma lista completa de código de um formulário cliente, veja Como: Implementar um Cliente do Padrão Assíncrono Baseado em Eventos.

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

Observações

Se a sua turma precisar de fornecer comportamento assíncrono de acordo com a Visão Geral de Padrões Assíncronos Baseada em Eventos, irá encontrar vários problemas de gestão de concorrência. Entre elas está a exigência de garantir que os gestores de eventos são chamados num thread ou contexto apropriado para o modelo de aplicação (por exemplo, aplicações Windows Forms, aplicações ASP.NET, aplicações de consola, e assim por diante). O AsyncOperationManager fornece uma forma conveniente de criar uma classe que corre corretamente em todos os modelos de aplicação suportados pelo .NET Framework.

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

Para mais informações sobre a implementação de classes assíncronas, consulte Implementação do Padrão Assíncrono Baseado em Eventos.

Propriedades

Name Description
SynchronizationContext

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

Métodos

Name Description
CreateOperation(Object)

Devolve e AsyncOperation para acompanhar a duração de uma determinada operação assíncrona.

Aplica-se a

Ver também