AsyncOperation Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Verfolgt die Lebensdauer eines asynchronen Vorgangs nach.
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- Vererbung
-
AsyncOperation
Beispiele
Das folgende Codebeispiel veranschaulicht die Verwendung eines AsyncOperation Objekts zum Nachverfolgen der Lebensdauer asynchroner Vorgänge. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die System.ComponentModel.AsyncOperationManager Klasse bereitgestellt wird.
Eine vollständige Codeauflistung finden Sie unter Vorgehensweise: Implementieren einer Komponente, die das ereignisbasierte asynchrone Muster unterstützt. Eine vollständige Codeauflistung eines Clientformulars finden Sie unter How to: Implement a Client of the Event-based Asynchronous Pattern.
// 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
Hinweise
Wenn Sie eine Klasse gemäß der ereignisbasierten asynchronen Musterübersicht implementieren, müssen Sie möglicherweise die Lebensdauer der einzelnen asynchronen Vorgänge nachverfolgen, die für eine Instanz Ihrer Klasse aufgerufen werden. Die AsyncOperation Klasse bietet Möglichkeiten zum Nachverfolgen und Melden des Fortschritts einer asynchronen Aufgabe.
In der folgenden Liste werden Möglichkeiten zur Verwendung eines AsyncOperation Objekts aufgeführt:
Rufen Sie Post den asynchronen Arbeitscode auf, um fortschritts- und Zwischenergebnisse an den Client zu melden.
Rufen Sie auf, um anzugeben, dass eine asynchrone Aufgabe abgeschlossen wurde, oder um eine ausstehende asynchrone Aufgabe PostOperationCompletedabzubrechen.
Ihre Klasse sollte ein AsyncOperation Objekt für jede asynchrone Aufgabe abrufen, indem sie beim Start jeder Aufgabe aufruft AsyncOperationManager.CreateOperation . Damit der Client separate asynchrone Aufgaben unterscheiden kann, AsyncOperationManager.CreateOperation verwendet einen Parameter für ein eindeutiges vom Client bereitgestelltes Token, das zur UserSuppliedState Eigenschaft wird. Sie kann dann vom Clientcode verwendet werden, um die bestimmte asynchrone Aufgabe zu identifizieren, die Status- oder Abschlussereignisse auslöst.
Hinweise für Vererber
Implementierer müssen sicherstellen, dass die PostOperationCompleted(SendOrPostCallback, Object) Aufrufe Post(SendOrPostCallback, Object) asynchron sind, sodass Klassenbibliotheksanbieter sich nicht mit potenziellen Stapelüberläufen befassen müssen, wenn sie asynchrones Verhalten in einem bestimmten Anwendungsmodell annehmen, das synchron ist.
Weitere Informationen zum Implementieren asynchroner Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Musters.
Eigenschaften
| Name | Beschreibung |
|---|---|
| SynchronizationContext |
Ruft das SynchronizationContext Objekt ab, das an den Konstruktor übergeben wurde. |
| UserSuppliedState |
Dient zum Abrufen oder Festlegen eines Objekts, das zum eindeutigen Identifizieren eines asynchronen Vorgangs verwendet wird. |
Methoden
| Name | Beschreibung |
|---|---|
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| Finalize() |
Beendet den asynchronen Vorgang. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| OperationCompleted() |
Beendet die Lebensdauer eines asynchronen Vorgangs. |
| Post(SendOrPostCallback, Object) |
Ruft einen Delegaten im Thread oder Kontext auf, der für das Anwendungsmodell geeignet ist. |
| PostOperationCompleted(SendOrPostCallback, Object) |
Beendet die Lebensdauer eines asynchronen Vorgangs. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |