AsyncOperation 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.
Nyomon követi egy aszinkron művelet élettartamát.
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- Öröklődés
-
AsyncOperation
Példák
Az alábbi példakód bemutatja, hogyan lehet objektumot AsyncOperation használni az aszinkron műveletek élettartamának nyomon követésére. Ez a példakód egy nagyobb, az System.ComponentModel.AsyncOperationManager osztályhoz tartozó példa része.
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 eseményalapú aszinkron minta áttekintése szerint implementál egy osztályt, előfordulhat, hogy nyomon kell követnie az osztály egy példányán meghívott összes aszinkron művelet élettartamát. Az AsyncOperation osztály módot kínál az aszinkron tevékenységek előrehaladásának nyomon követésére és jelentésére.
Az alábbi lista azonosítja az objektumok használatának módjait AsyncOperation :
Az előrehaladás és az időközi eredmények ügyfélnek való jelentéséhez hívja meg Post az aszinkron feldolgozó kódját.
Ha azt szeretné jelezni, hogy egy aszinkron tevékenység befejeződött, vagy egy függőben lévő aszinkron tevékenység megszakításához hívja meg a hívást PostOperationCompleted.
Az osztálynak minden aszinkron tevékenységhez be kell szereznie egy AsyncOperation objektumot, ha meghívja AsyncOperationManager.CreateOperation az egyes tevékenységek indításakor. Annak érdekében, hogy az ügyfél megkülönböztethesse a különböző aszinkron feladatokat, AsyncOperationManager.CreateOperation egy egyedi ügyfél által biztosított jogkivonat paraméterét veszi fel, amely a UserSuppliedState tulajdonság lesz. Ezt követően az ügyfélkód használható az előrehaladást vagy a befejezési eseményeket növelő aszinkron feladat azonosítására.
Megjegyzések az öröklőkhöz
A implementátoroknak gondoskodniuk kell arról, hogy a PostOperationCompleted(SendOrPostCallback, Object) meghívások aszinkronok Post(SendOrPostCallback, Object) legyenek, hogy az osztálytár-szolgáltatóknak ne kelljen foglalkozniuk a lehetséges verem-túlcsordulásokkal, ha aszinkron viselkedést feltételeznek egy adott alkalmazásmodellben, amely szinkron módon történik.
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 a SynchronizationContext konstruktornak átadott objektumot. |
| UserSuppliedState |
Lekéri vagy beállítja az aszinkron művelet egyedi azonosítására használt objektumot. |
Metódusok
| Name | Description |
|---|---|
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| Finalize() |
Véglegesíti az aszinkron műveletet. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| OperationCompleted() |
Egy aszinkron művelet élettartamának vége. |
| Post(SendOrPostCallback, Object) |
Meghív egy delegáltat az alkalmazásmodellnek megfelelő szálon vagy kontextusban. |
| PostOperationCompleted(SendOrPostCallback, Object) |
Egy aszinkron művelet élettartamának vége. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |