Compartir a través de


AsyncOperation Clase

Definición

Realiza un seguimiento de la duración de una operación asincrónica.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Herencia
AsyncOperation

Ejemplos

En el ejemplo de código siguiente se muestra el uso de un AsyncOperation objeto para realizar un seguimiento de la duración de las operaciones asincrónicas. Este ejemplo de código forma parte de un ejemplo más grande proporcionado para la System.ComponentModel.AsyncOperationManager clase .

Para obtener una lista de código completa, vea Cómo: Implementar un componente que admita el patrón asincrónico basado en eventos. Para obtener una lista de código completa de un formulario de cliente, vea Cómo: Implementar un cliente del patrón asincrónico basado en eventos.

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

Comentarios

Al implementar una clase según la información general del patrón asincrónico basado en eventos, es posible que tenga que realizar un seguimiento de la duración de cada operación asincrónica invocada en una instancia de la clase. La AsyncOperation clase proporciona maneras de realizar un seguimiento y notificar el progreso de una tarea asincrónica.

En la lista siguiente se identifican formas de usar un AsyncOperation objeto :

  • Para notificar el progreso y los resultados provisionales al cliente, llame Post desde el código de trabajo asincrónico.

  • Para indicar que se ha completado una tarea asincrónica o para cancelar una tarea asincrónica pendiente, llame a PostOperationCompleted.

La clase debe obtener un AsyncOperation objeto para cada tarea asincrónica llamando a AsyncOperationManager.CreateOperation cuando se inicia cada tarea. Para permitir que el cliente distinga tareas asincrónicas independientes, AsyncOperationManager.CreateOperation toma un parámetro para un token proporcionado por el cliente único, que se convierte en la UserSuppliedState propiedad . Después, el código de cliente puede usarlo para identificar la tarea asincrónica concreta que está generando eventos de progreso o finalización.

Notas a los desarrolladores de herederos

Los implementadores deben asegurarse de que las PostOperationCompleted(SendOrPostCallback, Object) invocaciones y Post(SendOrPostCallback, Object) son asincrónicas, de modo que los proveedores de bibliotecas de clases no necesiten preocuparse por los posibles desbordamientos de pila si asumen un comportamiento asincrónico en un modelo de aplicación determinado que se produce como sincrónico.

Para obtener más información sobre la implementación de clases asincrónicas, vea Implementación del patrón asincrónico basado en eventos.

Propiedades

Nombre Description
SynchronizationContext

Obtiene el SynchronizationContext objeto que se pasó al constructor.

UserSuppliedState

Obtiene o establece un objeto utilizado para identificar de forma única una operación asincrónica.

Métodos

Nombre Description
Equals(Object)

Determina si el objeto especificado es igual al objeto actual.

(Heredado de Object)
Finalize()

Finaliza la operación asincrónica.

GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
OperationCompleted()

Finaliza la duración de una operación asincrónica.

Post(SendOrPostCallback, Object)

Invoca un delegado en el subproceso o contexto adecuado para el modelo de aplicación.

PostOperationCompleted(SendOrPostCallback, Object)

Finaliza la duración de una operación asincrónica.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también