AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Pone fin a la duración de una operación asincrónica.
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
Objeto SendOrPostCallback que contiene el delegado al que se va a llamar cuando finalice la operación.
- arg
- Object
Argumento del delegado incluido en el parámetro d
.
Excepciones
Se ha llamado previamente al método OperationCompleted() para esta tarea.
d
es null
.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar el PostOperationCompleted método para finalizar la duración de una operación asincrónica. Este ejemplo de código es parte de un ejemplo más grande proporcionado para la clase System.ComponentModel.AsyncOperationManager.
// 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
Comentarios
Llame al PostOperationCompleted método para finalizar la duración de una operación asincrónica. Después de llamar a este método para una tarea determinada, las llamadas a su objeto correspondiente AsyncOperation generarán una excepción.
El d
parámetro ajusta el delegado al que quiere que llame la clase cuando finalice la duración de la tarea debido a la finalización, cancelación o error de la tarea. El AsyncOperation objeto garantizará que el delegado se invoque en el subproceso o contexto adecuado para el modelo de aplicación. El delegado puede generar opcionalmente un evento que notifique a los clientes que ha finalizado la duración de la tarea asincrónica.
El arg
parámetro se usa para pasar información de estado al delegado d
de finalización . Puede usar un AsyncOperation objeto o un System.ComponentModel.AsyncCompletedEventArgs objeto como valor de parámetro. Como alternativa, si desea proporcionar almacenamiento de estado adicional, puede usar una instancia de una clase derivada de la System.ComponentModel.AsyncCompletedEventArgs clase .
Notas a los desarrolladores de herederos
Los heredadores deben hacer que la PostOperationCompleted(SendOrPostCallback, Object) invocación sea asincrónica, de modo que los proveedores de bibliotecas de clases no tengan que preocuparse por los posibles desbordamientos de pila si asumen asincronía, pero se produce una sincrónica en un modelo de aplicación determinado. El método debe interpretarse como una llamada de "finalización de la duración", lo que significa que la implementación debe hacer lo que es adecuado para el modelo de aplicación. Por ejemplo, ASP.NET disminuirá su recuento de operaciones asincrónicas pendientes. Esto también debe poner la operación en un estado de modo que se produzca un error en las llamadas posteriores, ya que ahora se ha completado.
Para obtener más información sobre cómo implementar clases asincrónicas, vea Implementación del patrón asincrónico basado en eventos.