AsyncOperationManager AsyncOperationManager AsyncOperationManager AsyncOperationManager Class

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. Esta clase no puede heredarse. This class cannot be inherited.

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

Ejemplos

En el ejemplo de código siguiente se muestra cómo utilizar el AsyncOperationManager clase para crear una clase que admita las 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 hace en un subproceso independiente.This calculation can be time consuming, so it is done on a separate thread. Informes de progreso, los 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 apropiados.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 completo, 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 completo de un formulario de cliente, consulte Cómo: implementar un cliente en el 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 debe proporcionar un comportamiento asincrónico según la Event-based Asynchronous Pattern Overview, encontrará una serie de 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. 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.NETASP.NET aplicaciones, aplicaciones de consola y así sucesivamente).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 manera cómoda de crear una clase que se ejecuta correctamente en todos los modelos de aplicación compatibles con 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.

El AsyncOperationManager clase tiene un método CreateOperation, que devuelve un System.ComponentModel.AsyncOperation que puede utilizarse para realizar el seguimiento de la duración de una tarea asincrónica determinada.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 para una tarea se puede usar para los clientes de la alerta cuando se complete una tarea.The System.ComponentModel.AsyncOperation for a task can be used to alert clients when a task completes. También puede utilizarse para publicar las 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 acerca de cómo implementar 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 SynchronizationContext SynchronizationContext 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) CreateOperation(Object) CreateOperation(Object) 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

Consultar también