AsyncOperationManager Clase

Definición

Proporciona la administración de simultaneidad para las clases que admiten llamadas de método asincrónico.Provides concurrency management for classes that support asynchronous method calls. No se puede heredar esta clase.This class cannot be inherited.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Herencia
AsyncOperationManager

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar la clase AsyncOperationManager para crear una clase que admita operaciones asincrónicas para cualquier modelo de aplicación.The following code example demonstrates using the AsyncOperationManager class to create a class that supports asynchronous operations for any application model. Muestra cómo implementar una clase que prueba un número para determinar si es primo.It shows how to implement a class that tests a number to determine whether it is prime. Este cálculo puede llevar mucho tiempo, por lo que se realiza en un subproceso independiente.This calculation can be time consuming, so it is done on a separate thread. La clase AsyncOperation controla los informes de progreso, los resultados incrementales y las notificaciones de finalización, lo que garantiza que se llame a los controladores de eventos del cliente en el subproceso o contexto adecuado.Progress reports, incremental results, and completion notifications are handled by the AsyncOperation class, which ensures that the client's event handlers are called on the proper thread or context.

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

Si la clase necesita proporcionar un comportamiento asincrónico de acuerdo con la información general sobre el modelo asincrónico basado en eventos, se producirán varios problemas de administración de simultaneidad.If your class needs to provide asynchronous behavior according to the Event-based Asynchronous Pattern Overview, you will encounter a number of concurrency management issues. Entre ellos, es necesario asegurarse de que se llama a los controladores de eventos en un subproceso o contexto adecuado para el modelo de aplicación (por ejemplo, Windows Forms aplicaciones, ASP.NETASP.NET aplicaciones, aplicaciones de consola, etc.).Among these is the requirement to ensure that event handlers are called on a thread or context that is appropriate for the application model (for example, Windows Forms applications, ASP.NETASP.NET applications, console applications, and so on). El AsyncOperationManager proporciona una forma cómoda de crear una clase que se ejecuta correctamente en todos los modelos de aplicación admitidos por el .NET Framework.NET Framework.The AsyncOperationManager provides a convenient way to create a class that runs properly under all application models supported by the .NET Framework.NET Framework.

La clase AsyncOperationManager tiene un método, CreateOperation, que devuelve una System.ComponentModel.AsyncOperation que se puede utilizar para realizar el seguimiento de la duración de una tarea asincrónica concreta.The AsyncOperationManager class has one method, CreateOperation, which returns an System.ComponentModel.AsyncOperation that can be used to track the duration of a particular asynchronous task. El System.ComponentModel.AsyncOperation de una tarea se puede usar para alertar a los clientes cuando se completa una tarea.The System.ComponentModel.AsyncOperation for a task can be used to alert clients when a task completes. También se puede usar para publicar actualizaciones de progreso y resultados incrementales sin terminar la operación.It can also be used to post progress updates and incremental results without terminating the operation.

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 o establece el contexto de sincronización de la operación asincrónica.Gets or sets the synchronization context for the asynchronous operation.

Métodos

CreateOperation(Object)

Devuelve un objeto AsyncOperation para realizar un seguimiento de la duración de una operación asincrónica determinada.Returns an AsyncOperation for tracking the duration of a particular asynchronous operation.

Se aplica a

Consulte también: