AsyncOperation Clase
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í.
Realiza un seguimiento de la duración de una operación asincrónica.
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- Herencia
-
AsyncOperation
Ejemplos
En el ejemplo de código siguiente se muestra el uso de un AsyncOperation objeto 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 System.ComponentModel.AsyncOperationManager.
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
Al implementar una clase según la información general del patrón asincrónico basado en eventos, es posible que tenga que realizar un seguimiento de la duración de cada operación asincrónica invocada en una instancia de la clase . La AsyncOperation clase proporciona maneras de realizar un seguimiento y notificar el progreso de una tarea asincrónica.
En la lista siguiente se identifican las formas de usar un AsyncOperation objeto :
Para notificar el progreso y los resultados provisionales al cliente, llame Post desde el código de trabajo asincrónico.
Para indicar que se ha completado una tarea asincrónica o para cancelar una tarea asincrónica pendiente, llame a PostOperationCompleted.
La clase debe obtener un AsyncOperation objeto para cada tarea asincrónica llamando a AsyncOperationManager.CreateOperation cuando se inicia cada tarea. Para permitir que el cliente distinga tareas asincrónicas independientes, AsyncOperationManager.CreateOperation toma un parámetro para un token único proporcionado por el cliente, que se convierte en la UserSuppliedState propiedad . Después, el código de cliente puede usarlo para identificar la tarea asincrónica concreta que está generando eventos de progreso o finalización.
Notas a los desarrolladores de herederos
Los implementadores deben asegurarse de que las PostOperationCompleted(SendOrPostCallback, Object) invocaciones y Post(SendOrPostCallback, Object) son asincrónicas, de modo que los proveedores de bibliotecas de clases no tengan que preocuparse por los posibles desbordamientos de pila si asumen un comportamiento asincrónico en un modelo de aplicación determinado que se produce como sincrónico.
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 el objeto SynchronizationContext que se pasó al constructor. |
UserSuppliedState |
Obtiene o establece un objeto que se usa para identificar de forma única una operación asincrónica. |
Métodos
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
Finalize() |
Finaliza la operación asincrónica. |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
OperationCompleted() |
Pone fin a la duración de una operación asincrónica. |
Post(SendOrPostCallback, Object) |
Invoca un delegado en el subproceso o contexto adecuado para el modelo de aplicaciones. |
PostOperationCompleted(SendOrPostCallback, Object) |
Pone fin a la duración de una operación asincrónica. |
ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |