AsyncOperationManager Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Fornece gerenciamento de simultaneidade para classes que dão 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 o uso da 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 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",
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
Comentários
Se sua classe precisar fornecer um comportamento assíncrono de acordo com a Visão Geral do Padrão Assíncrono baseada 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, CreateOperationque retorna um System.ComponentModel.AsyncOperation que pode ser usado para acompanhar a duração de uma tarefa assíncrona específica. A System.ComponentModel.AsyncOperation tarefa pode ser usada para alertar os clientes quando uma tarefa for 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
| Nome | Description |
|---|---|
| SynchronizationContext |
Obtém ou define o contexto de sincronização para a operação assíncrona. |
Métodos
| Nome | Description |
|---|---|
| CreateOperation(Object) |
Retorna um AsyncOperation para acompanhar a duração de uma operação assíncrona específica. |