AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) Método
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.
Encerra o tempo de vida de uma operação assíncrona.
public:
void PostOperationCompleted(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void PostOperationCompleted (System.Threading.SendOrPostCallback d, object arg);
public void PostOperationCompleted (System.Threading.SendOrPostCallback d, object? arg);
member this.PostOperationCompleted : System.Threading.SendOrPostCallback * obj -> unit
Public Sub PostOperationCompleted (d As SendOrPostCallback, arg As Object)
Parâmetros
Um objeto SendOrPostCallback que encapsula o delegado a ser chamado quando a operação é encerrada.
- arg
- Object
Um argumento para o delegado contido no parâmetro d
.
Exceções
OperationCompleted() foi chamado anteriormente para essa tarefa.
d
é null
.
Exemplos
O exemplo de código a seguir demonstra o uso do PostOperationCompleted método para encerrar o tempo de vida de uma operação assíncrona. Este exemplo de código faz parte de um exemplo maior fornecido para a System.ComponentModel.AsyncOperationManager classe .
// This method cancels a pending asynchronous operation.
public void CancelAsync(object taskId)
{
AsyncOperation asyncOp = userStateToLifetime[taskId] as AsyncOperation;
if (asyncOp != null)
{
lock (userStateToLifetime.SyncRoot)
{
userStateToLifetime.Remove(taskId);
}
}
}
' This method cancels a pending asynchronous operation.
Public Sub CancelAsync(ByVal taskId As Object)
Dim obj As Object = userStateToLifetime(taskId)
If (obj IsNot Nothing) Then
SyncLock userStateToLifetime.SyncRoot
userStateToLifetime.Remove(taskId)
End SyncLock
End If
End Sub
Comentários
Chame o PostOperationCompleted método para encerrar o tempo de vida de uma operação assíncrona. Depois que esse método for chamado para uma tarefa específica, as chamadas para seu objeto correspondente AsyncOperation gerarão uma exceção.
O d
parâmetro encapsula o delegado que você deseja que sua classe chame quando o tempo de vida da tarefa terminar devido à conclusão, cancelamento ou falha da tarefa. O AsyncOperation objeto garantirá que o delegado seja invocado no thread ou no contexto apropriado para o modelo de aplicativo. Opcionalmente, o delegado pode gerar um evento que notifica os clientes de que o tempo de vida da tarefa assíncrona terminou.
O arg
parâmetro é usado para passar informações de estado para o delegado de d
conclusão . Você pode usar um AsyncOperation objeto ou um System.ComponentModel.AsyncCompletedEventArgs objeto como o valor do parâmetro. Como alternativa, se você quiser fornecer armazenamento de estado adicional, poderá usar uma instância de uma classe derivada da System.ComponentModel.AsyncCompletedEventArgs classe .
Notas aos Herdeiros
Os herdadores devem tornar a PostOperationCompleted(SendOrPostCallback, Object) invocação assíncrona, para que os provedores de biblioteca de classes não precisem se preocupar com possíveis estouros de pilha se assumirem assíncrona, mas um modelo de aplicativo específico seja síncrono. O método deve ser interpretado como uma chamada "encerrando o tempo de vida", o que significa que a implementação precisa fazer o que é apropriado para o modelo de aplicativo. Por exemplo, ASP.NET diminuirá sua contagem de operações assíncronas pendentes. Isso também deve colocar a operação em um estado de modo que todas as chamadas subsequentes a ela falhem, já que ela foi concluída.
Para obter mais informações sobre como implementar classes assíncronas, consulte Implementando o padrão assíncrono baseado em evento.