AsyncOperationManager.CreateOperation(Object) Método
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.
Devolve e AsyncOperation para acompanhar a duração de uma determinada operação assíncrona.
public:
static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(object userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation
Parâmetros
- userSuppliedState
- Object
Um objeto usado para associar uma parte do estado do cliente, como um ID de tarefa, a uma operação assíncrona particular.
Devoluções
E AsyncOperation que podes usar para acompanhar a duração de uma invocação de método assíncrono.
Exemplos
O exemplo de código seguinte demonstra a utilização do CreateOperation método para criar um System.ComponentModel.AsyncOperation para acompanhar a duração das operações assíncronas. Este exemplo de código faz parte de um exemplo maior fornecido para a AsyncOperationManager classe.
// 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
O CreateOperation método devolve um System.ComponentModel.AsyncOperation que pode usar para acompanhar a duração de uma determinada operação assíncrona e para alertar o modelo de aplicação quando a operação termina. Também pode usá-lo para publicar atualizações de progresso e resultados incrementais sem terminar a operação. Eles System.ComponentModel.AsyncOperation irão corretamente orientar estas chamadas para o thread ou contexto apropriado para o modelo de aplicação.
Se implementar uma classe que suporta o Padrão Assíncrono Baseado em Eventos, a sua classe deve chamar CreateOperation cada vez que o seu método MethodNameAsync for chamado. A aplicação cliente que faz chamadas ao método pode usar o userSuppliedState parâmetro para identificar de forma única cada invocação, de modo a distinguir eventos gerados durante a execução da operação assíncrona.
Atenção
O código do cliente deve fornecer um valor único para o userSuppliedState parâmetro. IDs de tarefa não únicos podem fazer com que a sua implementação reporte incorretamente o progresso e outros eventos. O teu código deve verificar um ID de tarefa não único e lançar um System.ArgumentException se for detetado um.
O teu código deve registar cada System.ComponentModel.AsyncOperation retorno e CreateOperation usar o objeto na operação assíncrona subjacente correspondente para publicar atualizações e terminar a operação. Este acompanhamento pode ser tão simples como passar o System.ComponentModel.AsyncOperation como parâmetro entre os delegados. Em designs mais sofisticados, a sua turma pode manter uma coleção de System.ComponentModel.AsyncOperation objetos, adicionando objetos quando as tarefas são iniciadas e removendo-os quando as tarefas são concluídas ou canceladas. Esta abordagem permite-lhe verificar valores de parâmetros únicos userSuppliedState , sendo o método que deve usar ao trabalhar com classes que suportam múltiplas invocações concorrentes.
Para mais informações sobre a implementação de classes assíncronas, consulte Implementação do Padrão Assíncrono Baseado em Eventos.