AsyncOperationManager.CreateOperation(Object) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Devuelve un objeto AsyncOperation para realizar un 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);
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 utiliza para asociar un fragmento de estado del cliente, como un id. de tarea, a una operación asincrónica determinada.
Devoluciones
Objeto AsyncOperation que se puede utilizar para realizar un seguimiento de la duración de una invocación a un método asincrónico.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar el 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 es parte de un ejemplo más grande proporcionado para la clase AsyncOperationManager.
// 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
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 completa 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 admita el patrón asincrónico basado en eventos, la clase debe llamar CreateOperation cada vez que se llama 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, con el fin de distinguir los eventos generados durante la ejecución de la operación asincrónica.
Precaución
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 tareas y quitarlos cuando se completan o se 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 cómo implementar clases asincrónicas, vea Implementación del patrón asincrónico basado en eventos.