AsyncOperationManager Klass

Definition

Tillhandahåller samtidighetshantering för klasser som stöder asynkrona metodanrop. Det går inte att ärva den här klassen.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Arv
AsyncOperationManager

Exempel

Följande kodexempel visar hur du använder AsyncOperationManager klassen för att skapa en klass som stöder asynkrona åtgärder för alla programmodeller. Den visar hur du implementerar en klass som testar ett tal för att avgöra om det är primärt. Den här beräkningen kan vara tidskrävande, så den görs på en separat tråd. Förloppsrapporter, inkrementella resultat och slutförandemeddelanden hanteras av AsyncOperation klassen, vilket säkerställer att klientens händelsehanterare anropas på rätt tråd eller kontext.

En fullständig kodlista finns i Så här implementerar du en komponent som stöder det händelsebaserade asynkrona mönstret. En fullständig kodlista över ett klientformulär finns i Så här implementerar du en klient för det händelsebaserade asynkrona mönstret.

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

Kommentarer

Om din klass behöver tillhandahålla asynkront beteende enligt den händelsebaserade Asynkrona mönsteröversikten, kommer du att stöta på ett antal problem med samtidighetshantering. Bland dessa finns kravet på att se till att händelsehanterare anropas på en tråd eller kontext som är lämplig för programmodellen (till exempel Windows Forms program, ASP.NET program, konsolprogram och så vidare). Med AsyncOperationManager kan du skapa en klass som körs korrekt under alla programmodeller som stöds av .NET Framework.

Klassen AsyncOperationManager har en metod, CreateOperation, som returnerar en System.ComponentModel.AsyncOperation som kan användas för att spåra varaktigheten för en viss asynkron aktivitet. För System.ComponentModel.AsyncOperation en uppgift kan användas för att avisera klienter när en uppgift har slutförts. Den kan också användas för att publicera förloppsuppdateringar och inkrementella resultat utan att avsluta åtgärden.

Mer information om hur du implementerar asynkrona klasser finns i Implementera det händelsebaserade asynkrona mönstret.

Egenskaper

Name Description
SynchronizationContext

Hämtar eller anger synkroniseringskontexten för den asynkrona åtgärden.

Metoder

Name Description
CreateOperation(Object)

Returnerar en AsyncOperation för att spåra varaktigheten för en viss asynkron åtgärd.

Gäller för

Se även