Freigeben über


AsyncOperation Klasse

Definition

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)

Gilt für:

Weitere Informationen