AsyncOperationManager Osztály

Definíció

Egyidejűségkezelést biztosít az aszinkron metódushívásokat támogató osztályok számára. Ez az osztály nem örökölhető.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Öröklődés
AsyncOperationManager

Példák

Az alábbi példakód bemutatja, hogyan hozhat létre olyan osztályt az AsyncOperationManager osztály használatával, amely támogatja az aszinkron műveleteket bármely alkalmazásmodell esetében. Bemutatja, hogyan implementálhat egy számot tesztelő osztályt annak megállapításához, hogy az elsődleges-e. Ez a számítás időigényes lehet, ezért külön szálon történik. A folyamatjelentéseket, a növekményes eredményeket és a befejezési értesítéseket az AsyncOperation osztály kezeli, amely biztosítja, hogy az ügyfél eseménykezelői a megfelelő szálon vagy kontextusban legyenek meghívva.

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 osztálynak az eseményalapú aszinkron minta áttekintése szerint aszinkron viselkedést kell biztosítania, számos egyidejűségi felügyeleti problémát fog tapasztalni. Ezek közé tartozik annak biztosítása, hogy az eseménykezelők az alkalmazásmodellnek megfelelő szálon vagy kontextusban legyenek meghívva (például Windows Forms alkalmazások, ASP.NET alkalmazások, konzolalkalmazások stb.). A AsyncOperationManager segítségével kényelmesen hozhat létre olyan osztályt, amely a .NET-keretrendszer által támogatott összes alkalmazásmodellben megfelelően fut.

Az AsyncOperationManager osztály egy metódussal rendelkezik, CreateOperationamely egy System.ComponentModel.AsyncOperation adott aszinkron tevékenység időtartamának nyomon követésére használható. A System.ComponentModel.AsyncOperation feladatokkal riasztást készíthet az ügyfelekről, ha egy feladat befejeződik. Állapotfrissítések és növekményes eredmények közzétételére is használható a művelet leállítása nélkül.

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 vagy beállítja az aszinkron művelet szinkronizálási környezetét.

Metódusok

Name Description
CreateOperation(Object)

AsyncOperation Egy adott aszinkron művelet időtartamának nyomon követésére szolgáló értéket ad vissza.

A következőre érvényes:

Lásd még