Teilen über


AsyncOperation Klasse

Definition

Verfolgt die Lebensdauer eines asynchronen Vorgangs.

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 Vorgehensweise: Implementieren eines Clients des ereignisbasierten asynchronen Musters.

// 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", 
                "taskId");
        }

        userStateToLifetime[taskId] = asyncOp;
    }

    // Start the asynchronous operation.
    WorkerEventHandler workerDelegate = new WorkerEventHandler(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 Übersicht über asynchrone Muster implementieren, müssen Sie möglicherweise die Lebensdauer jedes asynchronen Vorgangs nachverfolgen, der für eine instance Ihrer Klasse aufgerufen wird. Die AsyncOperation -Klasse bietet Möglichkeiten, den Fortschritt einer asynchronen Aufgabe nachzuverfolgen und zu melden.

In der folgenden Liste werden Möglichkeiten zur Verwendung eines AsyncOperation -Objekts aufgeführt:

  • Rufen Sie aus Ihrem asynchronen Workercode auf, Post um Fortschritts- und Zwischenergebnisse an den Client zu melden.

  • Um anzugeben, dass eine asynchrone Aufgabe abgeschlossen wurde, oder um eine ausstehende asynchrone Aufgabe abzubrechen, rufen Sie auf PostOperationCompleted.

Die -Klasse sollte ein AsyncOperation -Objekt für jede asynchrone Aufgabe abrufen, indem sie aufruft AsyncOperationManager.CreateOperation , wenn jede Aufgabe gestartet wird. Um dem Client die Unterscheidung separater asynchroner Aufgaben zu ermöglichen, 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 und Post(SendOrPostCallback, Object) asynchron sind, sodass Klassenbibliotheksanbieter sich nicht mit potenziellen Stapelüberläufen befassen müssen, wenn sie in einem bestimmten, synchronen Anwendungsmodell von asynchronem Verhalten ausgehen.

Weitere Informationen zum Implementieren asynchroner Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Musters.

Eigenschaften

SynchronizationContext

Ruft das SynchronizationContext-Objekt ab, das an den Konstruktor übergeben wurde.

UserSuppliedState

Ruft ein Objekt ab, das für die eindeutige Identifikation eines asynchronen Vorgangs verwendet wird, oder legt dieses fest.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
Finalize()

Beendet den asynchronen Vorgang.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
OperationCompleted()

Beendet die Lebensdauer eines asynchronen Vorgangs.

Post(SendOrPostCallback, Object)

Ruft einen Delegaten auf dem 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