AsyncOperationManager Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje správu souběžnosti pro třídy, které podporují asynchronní volání metod. Tuto třídu nelze zdědit.
public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
- Dědičnost
-
AsyncOperationManager
Příklady
Následující příklad kódu ukazuje použití AsyncOperationManager třídy k vytvoření třídy, která podporuje asynchronní operace pro jakýkoli aplikační model. Ukazuje, jak implementovat třídu, která testuje číslo k určení, zda je primární. Tento výpočet může být časově náročný, takže se provádí v samostatném vlákně. Třída zpracovává AsyncOperation zprávy o průběhu, přírůstkové výsledky a oznámení o dokončení, což zajišťuje, že obslužné rutiny událostí klienta se volají ve správném vlákně nebo kontextu.
Úplný výpis kódu klientského formuláře naleznete v tématu Postupy: Implementace klienta asynchronního vzoru založeného na událostech.
// 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
Poznámky
Pokud vaše třída potřebuje poskytovat asynchronní chování podle přehledu asynchronního vzoru založeného na událostech, setkáte se s řadou problémů se správou souběžnosti. Mezi tyto požadavky patří požadavek, aby obslužné rutiny událostí byly volána ve vlákně nebo kontextu, který je vhodný pro aplikační model (například model Windows Forms aplikace, ASP.NET aplikace, konzolové aplikace atd.). AsyncOperationManager poskytuje pohodlný způsob, jak vytvořit třídu, která běží správně ve všech modelech aplikací podporovaných rozhraním .NET Framework.
Třída AsyncOperationManager má jednu metodu, CreateOperationkterá vrací System.ComponentModel.AsyncOperation , který lze použít ke sledování doby trvání konkrétní asynchronní úlohy. Úkol System.ComponentModel.AsyncOperation lze použít k upozorňování klientů po dokončení úkolu. Dá se také použít k publikování aktualizací průběhu a přírůstkových výsledků bez ukončení operace.
Další informace o implementaci asynchronních tříd naleznete v tématu Implementace asynchronního vzoru založeného na událostech.
Vlastnosti
| Name | Description |
|---|---|
| SynchronizationContext |
Získá nebo nastaví kontext synchronizace pro asynchronní operaci. |
Metody
| Name | Description |
|---|---|
| CreateOperation(Object) |
AsyncOperation Vrátí hodnotu pro sledování doby trvání konkrétní asynchronní operace. |