AsyncOperation Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Effectue le suivi de la durée de vie d’une opération asynchrone.
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- Héritage
-
AsyncOperation
Exemples
L’exemple de code suivant illustre l’utilisation d’un AsyncOperation objet pour suivre la durée de vie des opérations asynchrones. Cet exemple de code fait partie d’un exemple plus grand fourni pour la System.ComponentModel.AsyncOperationManager classe.
Pour obtenir une description complète du code, consultez Guide pratique pour implémenter un composant prenant en charge le modèle asynchrone basé sur les événements. Pour obtenir une description complète du code d’un formulaire client, consultez Guide pratique pour implémenter un client du modèle asynchrone basé sur les événements.
// 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
Remarques
Lorsque vous implémentez une classe en fonction de la vue d’ensemble du modèle asynchrone basé sur les événements, vous devrez peut-être suivre la durée de vie de chaque opération asynchrone appelée sur une instance de votre classe. La AsyncOperation classe fournit des moyens de suivre et de signaler la progression d’une tâche asynchrone.
La liste suivante identifie les façons d’utiliser un AsyncOperation objet :
Pour signaler la progression et les résultats intermédiaires au client, appelez Post à partir de votre code worker asynchrone.
Pour indiquer qu’une tâche asynchrone est terminée ou pour annuler une tâche asynchrone en attente, appelez PostOperationCompleted.
Votre classe doit obtenir un AsyncOperation objet pour chaque tâche asynchrone en appelant AsyncOperationManager.CreateOperation quand chaque tâche démarre. Pour permettre au client de distinguer les tâches asynchrones distinctes, AsyncOperationManager.CreateOperation prend un paramètre pour un jeton fourni par le client unique, qui devient la UserSuppliedState propriété. Il peut ensuite être utilisé par le code client pour identifier la tâche asynchrone particulière qui déclenche des événements de progression ou d’achèvement.
Notes pour les héritiers
Les implémenteurs doivent s’assurer que les PostOperationCompleted(SendOrPostCallback, Object) appels et Post(SendOrPostCallback, Object) les appels sont asynchrones, de sorte que les fournisseurs de bibliothèques de classes n’ont pas besoin de s’inquiéter des dépassements de capacité de pile potentiels s’ils supposent un comportement asynchrone dans un modèle d’application particulier qui se produit comme synchrone.
Pour plus d’informations sur l’implémentation de classes asynchrones, consultez Implémentation du modèle asynchrone basé sur les événements.
Propriétés
| Nom | Description |
|---|---|
| SynchronizationContext |
Obtient l’objet SynchronizationContext passé au constructeur. |
| UserSuppliedState |
Obtient ou définit un objet utilisé pour identifier de manière unique une opération asynchrone. |
Méthodes
| Nom | Description |
|---|---|
| Equals(Object) |
Détermine si l’objet spécifié est égal à l’objet actuel. (Hérité de Object) |
| Finalize() |
Finalise l’opération asynchrone. |
| GetHashCode() |
Sert de fonction de hachage par défaut. (Hérité de Object) |
| GetType() |
Obtient la Type de l’instance actuelle. (Hérité de Object) |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| OperationCompleted() |
Termine la durée de vie d’une opération asynchrone. |
| Post(SendOrPostCallback, Object) |
Appelle un délégué sur le thread ou le contexte approprié pour le modèle d’application. |
| PostOperationCompleted(SendOrPostCallback, Object) |
Termine la durée de vie d’une opération asynchrone. |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |