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