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í AsyncOperation objektu ke sledování životnosti asynchronních operací. Tento příklad kódu je součástí většího příkladu uvedeného pro třídu System.ComponentModel.AsyncOperationManager.

Úplný výpis kódu naleznete v tématu Postupy: Implementace komponenty, která podporuje asynchronní vzor založený na událostech. Úplný výpis kódu klientského formuláře naleznete 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",
                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

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 sledování a hlášení průběhu asynchronní úlohy.

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

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

  • Chcete-li označit, že asynchronní úkol byl dokončen nebo chcete zrušit čekající asynchronní úkol, 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. Chcete-li klientovi umožnit rozlišovat samostatné asynchronní úlohy, AsyncOperationManager.CreateOperation přebírá parametr pro jedinečný token poskytnutý klientem, který se stane UserSuppliedState vlastností. Pak ho může klientský kód použít k identifikaci konkrétní asynchronní úlohy, která vyvolává průběh nebo události dokončení.

Poznámky pro dědice

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

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

Vlastnosti

Name Description
SynchronizationContext

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

UserSuppliedState

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

Metody

Name Description
Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

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

Dokončí asynchronní operaci.

GetHashCode()

Slouží jako výchozí funkce hash.

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

Získá Type aktuální instance.

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

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

(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é