AsyncOperationManager Classe

Definizione

Fornisce la gestione della concorrenza per le classi che supportano le chiamate asincrone. La classe non può essere ereditata.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Ereditarietà
AsyncOperationManager

Esempio

Nell'esempio di codice seguente viene illustrato l'uso della AsyncOperationManager classe per creare una classe che supporta operazioni asincrone per qualsiasi modello di applicazione. Illustra come implementare una classe che testa un numero per determinare se è primo. Questo calcolo può richiedere molto tempo, quindi viene eseguito su un thread separato. I report di stato, i risultati incrementali e le notifiche di completamento vengono gestiti dalla AsyncOperation classe , che garantisce che i gestori eventi del client vengano chiamati nel thread o nel contesto appropriato.

Per un elenco di codice completo, vedere Procedura: Implementare un componente che supporta il modello asincrono basato su eventi. Per un elenco di codice completo di un modulo client, vedere Procedura: Implementare un client del modello asincrono basato su eventi.

// 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

Commenti

Se la classe deve fornire un comportamento asincrono in base alla panoramica del modello asincrono basato su eventi, si verificano diversi problemi di gestione della concorrenza. Tra questi è necessario assicurarsi che i gestori eventi vengano chiamati su un thread o un contesto appropriato per il modello di applicazione (ad esempio, applicazioni Windows Forms, applicazioni ASP.NET, applicazioni console e così via). fornisce AsyncOperationManager un modo pratico per creare una classe che viene eseguita correttamente in tutti i modelli di applicazione supportati dalla .NET Framework.

La AsyncOperationManager classe ha un metodo , CreateOperation, che restituisce un System.ComponentModel.AsyncOperation oggetto che può essere usato per tenere traccia della durata di una determinata attività asincrona. L'oggetto System.ComponentModel.AsyncOperation per un'attività può essere usato per avvisare i client al termine di un'attività. Può anche essere usato per pubblicare gli aggiornamenti dello stato di avanzamento e i risultati incrementali senza terminare l'operazione.

Per altre informazioni sull'implementazione di classi asincrone, vedere Implementazione del modello asincrono basato su eventi.

Proprietà

SynchronizationContext

Ottiene o imposta il contesto di sincronizzazione per l'operazione asincrona.

Metodi

CreateOperation(Object)

Restituisce un oggetto AsyncOperation per rilevare la durata di una particolare operazione asincrona.

Si applica a

Vedi anche