AsyncOperationManager.CreateOperation(Object) Método

Definición

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

public:
 static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(object userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation

Parámetros

userSuppliedState
Object

Objeto que se usa para asociar un fragmento de estado de cliente, como un identificador de tarea, con una operación asincrónica determinada.

Devoluciones

AsyncOperation que puede usar para realizar un seguimiento de la duración de una invocación de método asincrónico.

Ejemplos

En el ejemplo de código siguiente se muestra el uso del CreateOperation método para crear un System.ComponentModel.AsyncOperation para realizar un seguimiento de la duración de las operaciones asincrónicas. Este ejemplo de código forma parte de un ejemplo más grande proporcionado para la AsyncOperationManager clase .

// 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",
                nameof(taskId));
        }

        userStateToLifetime[taskId] = asyncOp;
    }

    // Start the asynchronous operation.
    WorkerEventHandler workerDelegate = new(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

El CreateOperation método devuelve un System.ComponentModel.AsyncOperation que puede usar para realizar un seguimiento de la duración de una operación asincrónica determinada y para alertar al modelo de aplicación cuando se complete la operación. También puede usarlo para publicar actualizaciones de progreso y resultados incrementales sin terminar la operación. serializará System.ComponentModel.AsyncOperation correctamente estas llamadas al subproceso o contexto adecuado para el modelo de aplicación.

Si implementa una clase que admite el patrón asincrónico basado en eventos, la clase debe llamar cada CreateOperation vez que se llame al método MethodNameAsync . La aplicación cliente que realiza llamadas al método puede usar el userSuppliedState parámetro para identificar de forma única cada invocación, para distinguir los eventos generados durante la ejecución de la operación asincrónica.

Caution

El código de cliente debe proporcionar un valor único para el userSuppliedState parámetro . Los identificadores de tarea no únicos pueden hacer que la implementación notifique el progreso y otros eventos incorrectamente. El código debe comprobar si hay un identificador de tarea no único y producir un System.ArgumentException si se detecta uno.

El código debe realizar un seguimiento de todos los System.ComponentModel.AsyncOperation devueltos por CreateOperation y usar el objeto en la operación asincrónica subyacente correspondiente para publicar actualizaciones y finalizar la operación. Este seguimiento puede ser tan sencillo como pasar como System.ComponentModel.AsyncOperation parámetro entre delegados. En diseños más sofisticados, la clase puede mantener una colección de System.ComponentModel.AsyncOperation objetos, agregar objetos cuando se inician las tareas y quitarlos cuando se completan o cancelan las tareas. Este enfoque le permite comprobar si hay valores de parámetro únicos userSuppliedState y es el método que debe usar al trabajar con clases que admiten varias invocaciones simultáneas.

Para obtener más información sobre la implementación de clases asincrónicas, vea Implementación del patrón asincrónico basado en eventos.

Se aplica a

Consulte también