AsyncOperation Classe

Definição

Regista a vida útil de uma operação assíncrona.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Herança
AsyncOperation

Exemplos

O exemplo de código seguinte demonstra a utilização de um AsyncOperation objeto para acompanhar a vida útil das operações assíncronas. Este exemplo de código faz parte de um exemplo maior fornecido para a System.ComponentModel.AsyncOperationManager classe.

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

Quando implementa uma classe de acordo com a Visão Geral do Padrão Assíncrono Baseado em Eventos, pode ser necessário acompanhar a vida útil de cada operação assíncrona invocada numa instância da sua classe. A AsyncOperation classe fornece formas de acompanhar e reportar o progresso de uma tarefa assíncrona.

A lista seguinte identifica formas de usar um AsyncOperation objeto:

  • Para reportar o progresso e resultados intermédios ao cliente, ligue Post a partir do seu código de trabalhador assíncrono.

  • Para indicar que uma tarefa assíncrona foi concluída, ou para cancelar uma tarefa assíncrona pendente, chame PostOperationCompleted.

A tua turma deve obter um AsyncOperation objeto para cada tarefa assíncrona ao chamar AsyncOperationManager.CreateOperation quando cada tarefa começa. Para permitir que o cliente distinga tarefas assíncronas separadas, AsyncOperationManager.CreateOperation requer um parâmetro para um token único fornecido pelo cliente, que se torna a UserSuppliedState propriedade. Pode então ser usado pelo código cliente para identificar a tarefa assíncrona específica que está a aumentar os eventos de progresso ou conclusão.

Notas para Herdeiros

Os implementadores devem garantir que as PostOperationCompleted(SendOrPostCallback, Object) invocações e Post(SendOrPostCallback, Object) são assíncronas, para que os fornecedores de bibliotecas de classes não tenham de se preocupar com potenciais overflow de stack se assumirem comportamento assíncrono num determinado modelo de aplicação que seja síncrono.

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 o SynchronizationContext objeto que foi passado para o construtor.

UserSuppliedState

Obtém ou define um objeto usado para identificar de forma única uma operação assíncrona.

Métodos

Name Description
Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Finaliza a operação assíncrona.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
OperationCompleted()

Termina a vida útil de uma operação assíncrona.

Post(SendOrPostCallback, Object)

Invoca um delegado no thread ou contexto apropriado para o modelo de aplicação.

PostOperationCompleted(SendOrPostCallback, Object)

Termina a vida útil de uma operação assíncrona.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Ver também