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 verifica 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 appropriati.

Per un elenco di codice completo, vedere Procedura: Implementare un componente che supporta il modello asincrono basato su eventi. Per un elenco completo di codice 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 basata su eventi, si riscontrano 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 Windows Forms applicazioni, applicazioni ASP.NET, applicazioni console e così via. Offre AsyncOperationManager un modo pratico per creare una classe che viene eseguita correttamente in tutti i modelli di applicazione supportati da .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 un'attività asincrona specifica. L'oggetto System.ComponentModel.AsyncOperation per un'attività può essere usato per avvisare i client al termine di un'attività. Può essere usato anche per pubblicare gli aggiornamenti di stato 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