Partage via


AsyncOperation Classe

Définition

Suit 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 la liste complète de code, consultez Comment : implémenter un composant qui prend en charge le modèle asynchrone basé sur événement. Pour obtenir la liste 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", 
                "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

Remarques

Lorsque vous implémentez une classe selon 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 un 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 de travail 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 au démarrage de chaque tâche. Pour permettre au client de distinguer des tâches asynchrones distinctes, AsyncOperationManager.CreateOperation prend un paramètre pour un jeton unique fourni par le client, 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) sont asynchrones, de sorte que les fournisseurs de bibliothèques de classes n’ont pas besoin de se préoccuper des dépassements de capacité de pile potentiels s’ils supposent un comportement asynchrone dans un modèle d’application particulier qui se trouve être 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

SynchronizationContext

Obtient l'objet SynchronizationContext passé au constructeur.

UserSuppliedState

Obtient ou définit un objet servant à identifier de manière unique une opération asynchrone.

Méthodes

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()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(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)

S’applique à

Voir aussi