AsyncOperation Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Spårar livslängden för en asynkron åtgärd.
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- Arv
-
AsyncOperation
Exempel
Följande kodexempel visar hur du använder ett AsyncOperation objekt för att spåra livslängden för asynkrona åtgärder. Det här kodexemplet är en del av ett större exempel för System.ComponentModel.AsyncOperationManager klassen.
En fullständig kodlista finns i Så här implementerar du en komponent som stöder det händelsebaserade asynkrona mönstret. En fullständig kodlista över ett klientformulär finns i Så här implementerar du en klient för det händelsebaserade asynkrona mönstret.
// 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
Kommentarer
När du implementerar en klass enligt den händelsebaserade Asynkrona mönsteröversikten kan du behöva spåra livslängden för varje asynkron åtgärd som anropas på en instans av klassen. Klassen AsyncOperation innehåller sätt att spåra och rapportera förloppet för en asynkron aktivitet.
I följande lista identifieras olika sätt att använda ett AsyncOperation objekt:
Om du vill rapportera förlopp och interimsresultat till klienten anropar Post du från din asynkrona arbetskod.
Om du vill ange att en asynkron aktivitet har slutförts, eller om du vill avbryta en väntande asynkron aktivitet, anropar du PostOperationCompleted.
Klassen ska hämta ett AsyncOperation objekt för varje asynkron aktivitet genom att anropa AsyncOperationManager.CreateOperation när varje aktivitet startar. Om du vill att klienten ska kunna särskilja separata asynkrona uppgifter tar AsyncOperationManager.CreateOperation en parameter för en unik token som tillhandahålls av klienten, vilket blir UserSuppliedState egenskapen. Den kan sedan användas av klientkoden för att identifiera den specifika asynkrona uppgift som skapar förlopps- eller slutförandehändelser.
Anteckningar till arvingar
Implementerare måste se till att anropen PostOperationCompleted(SendOrPostCallback, Object) och Post(SendOrPostCallback, Object) är asynkrona, så att klassbiblioteksprovidrar inte behöver bry sig om potentiella stackspill om de antar asynkront beteende i en viss programmodell som råkar vara synkron.
Mer information om hur du implementerar asynkrona klasser finns i Implementera det händelsebaserade asynkrona mönstret.
Egenskaper
| Name | Description |
|---|---|
| SynchronizationContext |
Hämtar objektet SynchronizationContext som skickades till konstruktorn. |
| UserSuppliedState |
Hämtar eller anger ett objekt som används för att unikt identifiera en asynkron åtgärd. |
Metoder
| Name | Description |
|---|---|
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| Finalize() |
Slutför den asynkrona åtgärden. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| OperationCompleted() |
Avslutar livslängden för en asynkron åtgärd. |
| Post(SendOrPostCallback, Object) |
Anropar ett ombud i tråden eller kontexten som är lämplig för programmodellen. |
| PostOperationCompleted(SendOrPostCallback, Object) |
Avslutar livslängden för en asynkron åtgärd. |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |