AsyncOperationManager Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egyidejűségkezelést biztosít az aszinkron metódushívásokat támogató osztályok számára. Ez az osztály nem örökölhető.
public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
- Öröklődés
-
AsyncOperationManager
Példák
Az alábbi példakód bemutatja, hogyan hozhat létre olyan osztályt az AsyncOperationManager osztály használatával, amely támogatja az aszinkron műveleteket bármely alkalmazásmodell esetében. Bemutatja, hogyan implementálhat egy számot tesztelő osztályt annak megállapításához, hogy az elsődleges-e. Ez a számítás időigényes lehet, ezért külön szálon történik. A folyamatjelentéseket, a növekményes eredményeket és a befejezési értesítéseket az AsyncOperation osztály kezeli, amely biztosítja, hogy az ügyfél eseménykezelői a megfelelő szálon vagy kontextusban legyenek meghívva.
A teljes kódlistáért lásd : Az eseményalapú aszinkron mintát támogató összetevő implementálása. Az ügyfélűrlap teljes kódlistájáért lásd : Az eseményalapú aszinkron minta ügyfélének implementálása.
// 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
Megjegyzések
Ha az osztálynak az eseményalapú aszinkron minta áttekintése szerint aszinkron viselkedést kell biztosítania, számos egyidejűségi felügyeleti problémát fog tapasztalni. Ezek közé tartozik annak biztosítása, hogy az eseménykezelők az alkalmazásmodellnek megfelelő szálon vagy kontextusban legyenek meghívva (például Windows Forms alkalmazások, ASP.NET alkalmazások, konzolalkalmazások stb.). A AsyncOperationManager segítségével kényelmesen hozhat létre olyan osztályt, amely a .NET-keretrendszer által támogatott összes alkalmazásmodellben megfelelően fut.
Az AsyncOperationManager osztály egy metódussal rendelkezik, CreateOperationamely egy System.ComponentModel.AsyncOperation adott aszinkron tevékenység időtartamának nyomon követésére használható. A System.ComponentModel.AsyncOperation feladatokkal riasztást készíthet az ügyfelekről, ha egy feladat befejeződik. Állapotfrissítések és növekményes eredmények közzétételére is használható a művelet leállítása nélkül.
Az aszinkron osztályok implementálásával kapcsolatos további információkért lásd az eseményalapú aszinkron minta implementálását.
Tulajdonságok
| Name | Description |
|---|---|
| SynchronizationContext |
Lekéri vagy beállítja az aszinkron művelet szinkronizálási környezetét. |
Metódusok
| Name | Description |
|---|---|
| CreateOperation(Object) |
AsyncOperation Egy adott aszinkron művelet időtartamának nyomon követésére szolgáló értéket ad vissza. |