Compartir vía


AsyncOperationManager Clase

Definición

Proporciona la administración de simultaneidad para las clases que admiten llamadas de método asincrónico. Esta clase no puede heredarse.

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 el uso de la AsyncOperationManager clase para crear una clase que admita operaciones asincrónicas para cualquier modelo de aplicación. Muestra cómo implementar una clase que prueba un número para determinar si es primo. Este cálculo puede llevar mucho tiempo, por lo que se realiza en un subproceso independiente. La clase controla AsyncOperation 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 adecuados.

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 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 según la información general del patrón asincrónico basado en eventos, encontrará una serie de problemas de administración de simultaneidad. Entre estos es el requisito de 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, aplicaciones de ASP.NET, aplicaciones de consola, etc.). AsyncOperationManager proporciona una manera cómoda de crear una clase que se ejecute correctamente en todos los modelos de aplicación admitidos por .NET Framework.

La AsyncOperationManager clase tiene un método , CreateOperation, que devuelve un System.ComponentModel.AsyncOperation objeto que se puede usar para realizar un seguimiento de la duración de una tarea asincrónica determinada. Para System.ComponentModel.AsyncOperation una tarea se puede usar para alertar a los clientes cuando se completa una tarea. También se puede usar para publicar actualizaciones de progreso y resultados incrementales sin terminar la operación.

Para obtener más información sobre cómo implementar clases asincrónicas, vea Implementación del patrón asincrónico basado en eventos.

Propiedades

SynchronizationContext

Obtiene o establece el contexto de sincronización de la operación asincrónica.

Métodos

CreateOperation(Object)

Devuelve un objeto AsyncOperation para realizar un seguimiento de la duración de una operación asincrónica determinada.

Se aplica a

Consulte también