Sdílet prostřednictvím


AsyncOperation Třída

Definice

Sleduje životnost asynchronní operace.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Dědičnost
AsyncOperation

Příklady

Následující příklad kódu ukazuje použití objektu AsyncOperation ke sledování životnosti asynchronních operací. Tento příklad kódu je součástí většího příkladu System.ComponentModel.AsyncOperationManager pro třídu.

Úplný výpis kódu najdete v tématu Postupy: Implementace komponenty, která podporuje asynchronní vzor založený na událostech. Úplný výpis kódu klientského formuláře najdete v tématu Postupy: Implementace klienta asynchronního vzoru založeného na událostech.

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

Poznámky

Když implementujete třídu podle přehledu asynchronního vzoru založeného na událostech, možná budete muset sledovat životnost každé asynchronní operace vyvolané na instanci vaší třídy. Třída AsyncOperation poskytuje způsoby, jak sledovat a vykazovat průběh asynchronní úlohy.

Následující seznam uvádí způsoby použití objektu AsyncOperation :

  • Pokud chcete klientovi hlásit průběh a průběžné výsledky, zavolejte Post z asynchronního kódu pracovního procesu.

  • Pokud chcete označit, že asynchronní úloha byla dokončena, nebo chcete zrušit čekající asynchronní úlohu, zavolejte .PostOperationCompleted

Vaše třída by měla získat AsyncOperation objekt pro každou asynchronní úlohu voláním AsyncOperationManager.CreateOperation při spuštění každého úkolu. Aby klient mohl rozlišovat samostatné asynchronní úlohy, AsyncOperationManager.CreateOperation vezme parametr pro jedinečný token poskytnutý klientem, který se stane UserSuppliedState vlastností. Klientský kód ho pak může použít k identifikaci konkrétního asynchronního úkolu, který vyvolává události průběhu nebo dokončení.

Poznámky pro dědice

Implementátoři musí zajistit PostOperationCompleted(SendOrPostCallback, Object) asynchronní volání a Post(SendOrPostCallback, Object) , aby se poskytovatelé knihovny tříd nemuseli zabývat potenciálními přetečeními zásobníku, pokud předpokládají asynchronní chování v konkrétním modelu aplikace, který je náhodou synchronní.

Další informace o implementaci asynchronních tříd najdete v tématu Implementace asynchronního vzoru založeného na událostech.

Vlastnosti

SynchronizationContext

SynchronizationContext Získá objekt, který byl předán konstruktoru.

UserSuppliedState

Získá nebo nastaví objekt použitý k jedinečné identifikaci asynchronní operace.

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Dokončí asynchronní operaci.

GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
OperationCompleted()

Ukončí životnost asynchronní operace.

Post(SendOrPostCallback, Object)

Vyvolá delegáta ve vlákně nebo kontextu vhodném pro aplikační model.

PostOperationCompleted(SendOrPostCallback, Object)

Ukončí životnost asynchronní operace.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také