AsyncOperationManager Klas

Definitie

Biedt gelijktijdigheidsbeheer voor klassen die asynchrone methodeaanroepen ondersteunen. Deze klasse kan niet worden overgenomen.

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

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de AsyncOperationManager klasse gebruikt om een klasse te maken die asynchrone bewerkingen ondersteunt voor elk toepassingsmodel. Het laat zien hoe u een klasse implementeert waarmee een getal wordt getest om te bepalen of deze prime is. Deze berekening kan tijdrovend zijn, dus deze wordt uitgevoerd op een afzonderlijke thread. Voortgangsrapporten, incrementele resultaten en voltooiingsmeldingen worden verwerkt door de AsyncOperation klasse, waardoor de gebeurtenis-handlers van de client worden aangeroepen op de juiste thread of context.

Zie How to: Implement a Component That Supports the Event-based Asynchronous Pattern voor een volledige codevermelding. Zie How to: Implement a Client of the Event-based Asynchronous Pattern voor een volledige codevermelding van een clientformulier.

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

Opmerkingen

Als uw klasse asynchroon gedrag moet bieden volgens het overzicht van Asynchroon patroon op basis van gebeurtenissen, treedt er een aantal gelijktijdigheidsbeheerproblemen op. Dit is onder andere de vereiste om ervoor te zorgen dat gebeurtenis-handlers worden aangeroepen op een thread of context die geschikt is voor het toepassingsmodel (bijvoorbeeld Windows Forms toepassingen, ASP.NET toepassingen, consoletoepassingen enzovoort). De AsyncOperationManager biedt een handige manier om een klasse te maken die correct wordt uitgevoerd onder alle toepassingsmodellen die worden ondersteund door het .NET Framework.

De AsyncOperationManager klasse heeft één methode, CreateOperationdie een System.ComponentModel.AsyncOperation methode retourneert die kan worden gebruikt om de duur van een bepaalde asynchrone taak bij te houden. De System.ComponentModel.AsyncOperation voor een taak kan worden gebruikt om clients te waarschuwen wanneer een taak is voltooid. Het kan ook worden gebruikt om voortgangsupdates en incrementele resultaten te posten zonder de bewerking te beëindigen.

Zie Het Asynchrone patroon op basis van gebeurtenissen implementeren voor meer informatie over het implementeren van asynchrone klassen.

Eigenschappen

Name Description
SynchronizationContext

Hiermee haalt u de synchronisatiecontext voor de asynchrone bewerking op of stelt u deze in.

Methoden

Name Description
CreateOperation(Object)

Retourneert een AsyncOperation voor het bijhouden van de duur van een bepaalde asynchrone bewerking.

Van toepassing op

Zie ook