AsyncOperation Clase

Definición

Realiza un seguimiento de la duración de una operación asincrónica.Tracks the lifetime of an asynchronous operation.

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 cómo utilizar un objeto AsyncOperation para realizar un seguimiento de la duración de las operaciones asincrónicas.The following code example demonstrates using an AsyncOperation object to track the lifetime of asynchronous operations. Este ejemplo de código forma parte de un ejemplo más extenso proporcionado para la clase System.ComponentModel.AsyncOperationManager.This code example is part of a larger example provided for the System.ComponentModel.AsyncOperationManager class.

Para obtener una lista de código completa, vea Cómo: implementar un componente que admita el modelo asincrónico basado en eventos.For a full code listing, see How to: Implement a Component That Supports the Event-based Asynchronous Pattern. Para obtener una lista de código completa de un formulario de cliente, consulte Cómo: implementar un cliente del modelo asincrónico basado en eventos.For a full code listing of a client form, see How to: Implement a Client of the Event-based Asynchronous Pattern.

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

Comentarios

Al implementar una clase de acuerdo con la información general sobre el modelo asincrónico basado en eventos, puede que necesite realizar un seguimiento de la duración de cada operación asincrónica invocada en una instancia de su clase.When you implement a class according to the Event-based Asynchronous Pattern Overview, you may need to track the lifetime of each asynchronous operation invoked on an instance of your class. La clase AsyncOperation proporciona maneras de realizar un seguimiento e informar del progreso de una tarea asincrónica.The AsyncOperation class provides ways to track and report the progress of an asynchronous task.

En la lista siguiente se identifican las formas de usar un objeto de AsyncOperation:The following list identifies ways to use an AsyncOperation object:

  • Para informar sobre el progreso y los resultados provisionales al cliente, llame a Post desde el código de trabajo asincrónico.To report progress and interim results to the client, call Post from your asynchronous worker code.

  • Para indicar que una tarea asincrónica se ha completado o para cancelar una tarea asincrónica pendiente, llame a PostOperationCompleted.To indicate that an asynchronous task has completed, or to cancel a pending asynchronous task, call PostOperationCompleted.

La clase debe obtener un objeto AsyncOperation para cada tarea asincrónica llamando a AsyncOperationManager.CreateOperation cuando se inicia cada tarea.Your class should get an AsyncOperation object for each asynchronous task by calling AsyncOperationManager.CreateOperation when each task starts. Para permitir que el cliente distinga las tareas asincrónicas independientes, AsyncOperationManager.CreateOperation toma un parámetro para un token único proporcionado por el cliente, que se convierte en la propiedad UserSuppliedState.To allow the client to distinguish separate asynchronous tasks, AsyncOperationManager.CreateOperation takes a parameter for a unique client-provided token, which becomes the UserSuppliedState property. A continuación, el código de cliente puede utilizarlo para identificar la tarea asincrónica concreta que está generando eventos de progreso o de finalización.It can then be used by client code to identify the particular asynchronous task that is raising progress or completion events.

Notas a los desarrolladores de herederos

Los implementadores deben asegurarse de que las invocaciones de PostOperationCompleted(SendOrPostCallback, Object) y Post(SendOrPostCallback, Object) sean asincrónicas, de modo que los proveedores de biblioteca de clases no tengan que preocuparse de posibles desbordamientos de pila si suponen un comportamiento asincrónico en un modelo de aplicación determinado que resulta ser sincrónico.Implementers must ensure the PostOperationCompleted(SendOrPostCallback, Object) and Post(SendOrPostCallback, Object) invocations are asynchronous, so that class library providers do not need to concern themselves with potential stack overflows if they assume asynchronous behavior in a particular application model that happens to be synchronous.

Para obtener más información sobre la implementación de clases asincrónicas, vea implementar el modelo asincrónico basado en eventos.For more information about implementing asynchronous classes, see Implementing the Event-based Asynchronous Pattern.

Propiedades

SynchronizationContext

Obtiene el objeto SynchronizationContext que se ha pasado al constructor.Gets the SynchronizationContext object that was passed to the constructor.

UserSuppliedState

Obtiene o establece un objeto que se usa para identificar de forma única una operación asincrónica.Gets or sets an object used to uniquely identify an asynchronous operation.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.Determines whether the specified object is equal to the current object.

(Heredado de Object)
Finalize()

Finaliza la operación asincrónica.Finalizes the asynchronous operation.

GetHashCode()

Sirve como función hash predeterminada.Serves as the default hash function.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.Gets the Type of the current instance.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del objeto Object actual.Creates a shallow copy of the current Object.

(Heredado de Object)
OperationCompleted()

Pone fin a la duración de una operación asincrónica.Ends the lifetime of an asynchronous operation.

Post(SendOrPostCallback, Object)

Invoca un delegado en el subproceso o contexto adecuado para el modelo de aplicaciones.Invokes a delegate on the thread or context appropriate for the application model.

PostOperationCompleted(SendOrPostCallback, Object)

Pone fin a la duración de una operación asincrónica.Ends the lifetime of an asynchronous operation.

ToString()

Devuelve una cadena que representa el objeto actual.Returns a string that represents the current object.

(Heredado de Object)

Se aplica a

Consulte también: