Sdílet prostřednictvím


AsyncOperationManager Třída

Definice

Poskytuje správu souběžnosti pro třídy, které podporují asynchronní volání metod. Tato třída se nemůže dědit.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Dědičnost
AsyncOperationManager

Příklady

Následující příklad kódu ukazuje použití AsyncOperationManager třídy k vytvoření třídy, která podporuje asynchronní operace pro libovolný aplikační model. Ukazuje, jak implementovat třídu, která testuje číslo, aby se zjistilo, zda je primární. Tento výpočet může být časově náročný, proto se provádí v samostatném vlákně. Sestavy průběhu, přírůstkové výsledky a oznámení o dokončení jsou zpracovávány AsyncOperation třídou, což zajišťuje, že obslužné rutiny událostí klienta jsou volána ve správném vlákně nebo kontextu.

Ú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

Pokud vaše třída potřebuje poskytovat asynchronní chování podle přehledu asynchronních vzorů založených na událostech, narazíte na řadu problémů se správou souběžnosti. Mezi tyto požadavky patří požadavek, aby se obslužné rutiny událostí volaly ve vlákně nebo kontextu, který je vhodný pro aplikační model (například model Windows Forms aplikace, ASP.NET aplikace, konzolové aplikace atd.). Poskytuje AsyncOperationManager pohodlný způsob, jak vytvořit třídu, která běží správně ve všech aplikačních modelech podporovaných rozhraním .NET Framework.

Třída AsyncOperationManager má jednu metodu , CreateOperationkterá vrací metodu System.ComponentModel.AsyncOperation , která se dá použít ke sledování doby trvání konkrétní asynchronní úlohy. Příkaz System.ComponentModel.AsyncOperation pro úkol se dá použít k upozorňování klientů na dokončení úkolu. Dá se také použít k publikování aktualizací průběhu a přírůstkových výsledků bez ukončení operace.

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

Vlastnosti

SynchronizationContext

Získá nebo nastaví kontext synchronizace pro asynchronní operaci.

Metody

CreateOperation(Object)

Vrátí hodnotu AsyncOperation pro sledování doby trvání konkrétní asynchronní operace.

Platí pro

Viz také