AsyncOperationManager Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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. |