Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase AsyncOperationManager

 

Publicado: octubre de 2016

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

Espacio de nombres:   System.ComponentModel
Ensamblado:  System (en System.dll)

System.Object
  System.ComponentModel.AsyncOperationManager

[HostProtectionAttribute(SecurityAction.LinkDemand, SharedState = true)]
public static class AsyncOperationManager

NombreDescripción
System_CAPS_pubpropertySystem_CAPS_staticSynchronizationContext

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

NombreDescripción
System_CAPS_pubmethodSystem_CAPS_staticCreateOperation(Object)

Devuelve un System.ComponentModel.AsyncOperation para el seguimiento de la duración de una operación asincrónica determinada.

Si una clase necesita proporcionar un comportamiento asincrónico conforme a la Event-based Asynchronous Pattern Overview, encontrará una serie de problemas de administración de simultaneidad. Uno de ellos es el requisito para asegurarse de que se llama a los controladores de eventos en un subproceso o contexto adecuado para el modelo de aplicación (por ejemplo, las aplicaciones de Windows Forms, ASP.NET aplicaciones, aplicaciones de consola y así sucesivamente). El AsyncOperationManager proporciona una forma cómoda de crear una clase que se ejecute correctamente en todos los modelos de aplicación compatibles con el .NET Framework.

La AsyncOperationManager clase tiene un método CreateOperation, que devuelve un System.ComponentModel.AsyncOperation que se puede utilizar para realizar el seguimiento de la duración de una tarea asincrónica determinada. El System.ComponentModel.AsyncOperation para una tarea se puede usar para los clientes de alerta cuando se complete una tarea. También puede utilizarse para exponer actualizaciones de progreso y resultados incrementales sin terminar la operación.

Para obtener más información acerca de la implementación de clases asincrónicas, vea Implementing the Event-based Asynchronous Pattern.

En el ejemplo de código siguiente se muestra cómo utilizar el 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. Informes de progreso, resultados incrementales y notificaciones de finalización se controlan mediante el AsyncOperation (clase), lo que garantiza que se llama a los controladores de eventos del cliente en el subproceso o contexto adecuado.

Para obtener una lista de código completo, vea 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 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);
}

Plataforma universal de Windows
Disponible desde 10
.NET Framework
Disponible desde 2.0
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: