AsyncOperationManager.CreateOperation(Object) Methode

Definition

Gibt einen AsyncOperation Wert zum Nachverfolgen der Dauer eines bestimmten asynchronen Vorgangs zurück.

public:
 static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation(object userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation

Parameter

userSuppliedState
Object

Ein Objekt, das verwendet wird, um einen Clientstatus, z. B. eine Aufgaben-ID, einem bestimmten asynchronen Vorgang zuzuordnen.

Gibt zurück

Sie AsyncOperation können die Dauer eines asynchronen Methodenaufrufs nachverfolgen.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der CreateOperation Methode zum Erstellen einer System.ComponentModel.AsyncOperation Nachverfolgung der Dauer asynchroner Vorgänge veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die AsyncOperationManager Klasse bereitgestellt wird.

// 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

Die CreateOperation Methode gibt einen System.ComponentModel.AsyncOperation Wert zurück, mit dem Sie die Dauer eines bestimmten asynchronen Vorgangs nachverfolgen und das Anwendungsmodell benachrichtigen können, wenn der Vorgang abgeschlossen ist. Sie können es auch verwenden, um Fortschrittsaktualisierungen und inkrementelle Ergebnisse zu veröffentlichen, ohne den Vorgang zu beenden. Diese System.ComponentModel.AsyncOperation Aufrufe werden ordnungsgemäß an den entsprechenden Thread oder Kontext für das Anwendungsmodell gemarsiert.

Wenn Sie eine Klasse implementieren, die das ereignisbasierte asynchrone Muster unterstützt, sollte Ihre Klasse jedes Mal aufrufen CreateOperation , wenn die MethodName-MethodeAsync aufgerufen wird. Die Clientanwendung, die Aufrufe an die Methode durchführt, kann den userSuppliedState Parameter verwenden, um die einzelnen Aufrufe eindeutig zu identifizieren, um Ereignisse zu unterscheiden, die während der Ausführung des asynchronen Vorgangs ausgelöst werden.

Vorsicht

Der Clientcode muss einen eindeutigen Wert für den userSuppliedState Parameter bereitstellen. Nicht eindeutige Aufgaben-IDs können dazu führen, dass ihre Implementierung den Fortschritt und andere Ereignisse falsch meldet. Ihr Code sollte nach einer nicht eindeutigen Aufgaben-ID suchen und einen Auslösen auslösen System.ArgumentException , wenn eine erkannt wird.

Ihr Code sollte alle System.ComponentModel.AsyncOperation zurückgegebenen Elemente CreateOperation nachverfolgen und das Objekt im entsprechenden zugrunde liegenden asynchronen Vorgang verwenden, um Aktualisierungen zu veröffentlichen und den Vorgang zu beenden. Diese Nachverfolgung kann so einfach wie das Übergeben des System.ComponentModel.AsyncOperation Parameters zwischen Stellvertretungen sein. In komplexeren Designs kann Ihre Klasse eine Auflistung von System.ComponentModel.AsyncOperation Objekten verwalten, Objekte hinzufügen, wenn Aufgaben gestartet und entfernt werden, wenn Aufgaben abgeschlossen oder abgebrochen werden. Mit diesem Ansatz können Sie nach eindeutigen userSuppliedState Parameterwerten suchen und ist die Methode, die Sie beim Arbeiten mit Klassen verwenden sollten, die mehrere gleichzeitige Aufrufe unterstützen.

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

Gilt für:

Weitere Informationen