AsyncOperation Osztály

Definíció

Nyomon követi egy aszinkron művelet élettartamát.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Öröklődés
AsyncOperation

Példák

Az alábbi példakód bemutatja, hogyan lehet objektumot AsyncOperation használni az aszinkron műveletek élettartamának nyomon követésére. Ez a példakód egy nagyobb, az System.ComponentModel.AsyncOperationManager osztályhoz tartozó példa része.

A teljes kódlistáért lásd : Az eseményalapú aszinkron mintát támogató összetevő implementálása. Az ügyfélűrlap teljes kódlistájáért lásd : Az eseményalapú aszinkron minta ügyfélének implementálása.

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

Megjegyzések

Ha az eseményalapú aszinkron minta áttekintése szerint implementál egy osztályt, előfordulhat, hogy nyomon kell követnie az osztály egy példányán meghívott összes aszinkron művelet élettartamát. Az AsyncOperation osztály módot kínál az aszinkron tevékenységek előrehaladásának nyomon követésére és jelentésére.

Az alábbi lista azonosítja az objektumok használatának módjait AsyncOperation :

  • Az előrehaladás és az időközi eredmények ügyfélnek való jelentéséhez hívja meg Post az aszinkron feldolgozó kódját.

  • Ha azt szeretné jelezni, hogy egy aszinkron tevékenység befejeződött, vagy egy függőben lévő aszinkron tevékenység megszakításához hívja meg a hívást PostOperationCompleted.

Az osztálynak minden aszinkron tevékenységhez be kell szereznie egy AsyncOperation objektumot, ha meghívja AsyncOperationManager.CreateOperation az egyes tevékenységek indításakor. Annak érdekében, hogy az ügyfél megkülönböztethesse a különböző aszinkron feladatokat, AsyncOperationManager.CreateOperation egy egyedi ügyfél által biztosított jogkivonat paraméterét veszi fel, amely a UserSuppliedState tulajdonság lesz. Ezt követően az ügyfélkód használható az előrehaladást vagy a befejezési eseményeket növelő aszinkron feladat azonosítására.

Megjegyzések az öröklőkhöz

A implementátoroknak gondoskodniuk kell arról, hogy a PostOperationCompleted(SendOrPostCallback, Object) meghívások aszinkronok Post(SendOrPostCallback, Object) legyenek, hogy az osztálytár-szolgáltatóknak ne kelljen foglalkozniuk a lehetséges verem-túlcsordulásokkal, ha aszinkron viselkedést feltételeznek egy adott alkalmazásmodellben, amely szinkron módon történik.

Az aszinkron osztályok implementálásával kapcsolatos további információkért lásd az eseményalapú aszinkron minta implementálását.

Tulajdonságok

Name Description
SynchronizationContext

Lekéri a SynchronizationContext konstruktornak átadott objektumot.

UserSuppliedState

Lekéri vagy beállítja az aszinkron művelet egyedi azonosítására használt objektumot.

Metódusok

Name Description
Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
Finalize()

Véglegesíti az aszinkron műveletet.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
OperationCompleted()

Egy aszinkron művelet élettartamának vége.

Post(SendOrPostCallback, Object)

Meghív egy delegáltat az alkalmazásmodellnek megfelelő szálon vagy kontextusban.

PostOperationCompleted(SendOrPostCallback, Object)

Egy aszinkron művelet élettartamának vége.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes:

Lásd még