AsyncOperationManager Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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. |