AsyncOperationManager Class

Definition

Fornisce la gestione della concorrenza per le classi che supportano le chiamate asincrone.Provides concurrency management for classes that support asynchronous method calls. Questa classe non può essere ereditata.This class cannot be inherited.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Inheritance
AsyncOperationManager

Examples

Nell'esempio di codice riportato di seguito viene illustrato l'utilizzo della classe AsyncOperationManager per creare una classe che supporta operazioni asincrone per qualsiasi modello di applicazione.The following code example demonstrates using the AsyncOperationManager class to create a class that supports asynchronous operations for any application model. Viene illustrato come implementare una classe che verifica un numero per determinare se è un numero primo.It shows how to implement a class that tests a number to determine whether it is prime. Questo calcolo può richiedere molto tempo, quindi viene eseguito su un thread separato.This calculation can be time consuming, so it is done on a separate thread. I report di stato, i risultati incrementali e le notifiche di completamento vengono gestiti dalla classe AsyncOperation, che garantisce che i gestori eventi del client vengano chiamati sul thread o sul contesto appropriato.Progress reports, incremental results, and completion notifications are handled by the AsyncOperation class, which ensures that the client's event handlers are called on the proper thread or context.

Per un listato di codice completo, vedere procedura: implementare un componente che supporta il modello asincrono basato su eventi.For a full code listing, see How to: Implement a Component That Supports the Event-based Asynchronous Pattern. Per un elenco di codice completo di un form client, vedere procedura: implementare un client del modello asincrono basato su eventi.For a full code listing of a client form, see How to: Implement a Client of the Event-based Asynchronous Pattern.

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

Remarks

Se la classe deve fornire un comportamento asincrono in base alla Panoramica del modello asincrono basato su eventi, si verificheranno alcuni problemi di gestione della concorrenza.If your class needs to provide asynchronous behavior according to the Event-based Asynchronous Pattern Overview, you will encounter a number of concurrency management issues. 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, ASP.NETASP.NET applicazioni, applicazioni console e così via.Among these is the requirement to ensure that event handlers are called on a thread or context that is appropriate for the application model (for example, Windows Forms applications, ASP.NETASP.NET applications, console applications, and so on). Il AsyncOperationManager rappresenta un modo pratico per creare una classe che viene eseguita correttamente in tutti i modelli di applicazione supportati dall'.NET Framework.NET Framework.The AsyncOperationManager provides a convenient way to create a class that runs properly under all application models supported by the .NET Framework.NET Framework.

La classe AsyncOperationManager dispone di un metodo, CreateOperation, che restituisce un System.ComponentModel.AsyncOperation che può essere utilizzato per tenere traccia della durata di una particolare attività asincrona.The AsyncOperationManager class has one method, CreateOperation, which returns an System.ComponentModel.AsyncOperation that can be used to track the duration of a particular asynchronous task. Il System.ComponentModel.AsyncOperation per un'attività può essere utilizzato per avvisare i client quando viene completata un'attività.The System.ComponentModel.AsyncOperation for a task can be used to alert clients when a task completes. Può essere usato anche per inviare aggiornamenti di stato e risultati incrementali senza terminare l'operazione.It can also be used to post progress updates and incremental results without terminating the operation.

Per ulteriori informazioni sull'implementazione di classi asincrone, vedere implementazione del modello asincrono basato su eventi.For more information about implementing asynchronous classes, see Implementing the Event-based Asynchronous Pattern.

Properties

SynchronizationContext

Ottiene o imposta il contesto di sincronizzazione per l'operazione asincrona.Gets or sets the synchronization context for the asynchronous operation.

Methods

CreateOperation(Object)

Restituisce un oggetto AsyncOperation per rilevare la durata di una particolare operazione asincrona.Returns an AsyncOperation for tracking the duration of a particular asynchronous operation.

Applies to

See also