AsyncOperationManager Classe

Definizione

Fornisce la gestione della concorrenza per le classi che supportano chiamate asincrone di metodi. Questa 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 , assicurando che i gestori eventi del client vengano chiamati nel thread o nel contesto appropriato.

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",
                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

Commenti

Se la classe deve fornire un comportamento asincrono in base alla panoramica del modello asincrono basato su eventi, si riscontreranno 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. Il AsyncOperationManager offre un modo pratico per creare una classe che venga eseguita correttamente in tutti i modelli di applicazione supportati da .NET Framework.

La AsyncOperationManager classe dispone di un metodo , CreateOperationche restituisce un oggetto System.ComponentModel.AsyncOperation 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 registrare 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à

Nome Descrizione
SynchronizationContext

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

Metodi

Nome Descrizione
CreateOperation(Object)

Restituisce un oggetto AsyncOperation per tenere traccia della durata di un'operazione asincrona specifica.

Si applica a

Vedi anche