AsyncOperation Klas

Definitie

Houdt de levensduur van een asynchrone bewerking bij.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Overname
AsyncOperation

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een AsyncOperation object gebruikt om de levensduur van asynchrone bewerkingen bij te houden. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de System.ComponentModel.AsyncOperationManager klasse.

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

Wanneer u een klasse implementeert op basis van het Asynchrone patroonoverzicht op basis van gebeurtenissen, moet u mogelijk de levensduur bijhouden van elke asynchrone bewerking die wordt aangeroepen op een exemplaar van uw klasse. De AsyncOperation klasse biedt manieren om de voortgang van een asynchrone taak bij te houden en te rapporteren.

De volgende lijst identificeert manieren om een AsyncOperation object te gebruiken:

  • Als u de voortgang en tussentijdse resultaten aan de client wilt rapporteren, roept Post u uw asynchrone werkrolcode aan.

  • Als u wilt aangeven dat een asynchrone taak is voltooid of als u een in behandeling zijnde asynchrone taak wilt annuleren, roept PostOperationCompletedu aan.

Uw klasse moet een AsyncOperation object voor elke asynchrone taak ophalen door aan te roepen AsyncOperationManager.CreateOperation wanneer elke taak wordt gestart. Om de client in staat te stellen afzonderlijke asynchrone taken te onderscheiden, AsyncOperationManager.CreateOperation neemt u een parameter voor een uniek door de client opgegeven token, dat de UserSuppliedState eigenschap wordt. Deze kan vervolgens worden gebruikt door clientcode om de specifieke asynchrone taak te identificeren die voortgangs- of voltooiingsevenementen verhoogt.

Notities voor overnemers

Implementeerfuncties moeten ervoor zorgen dat de PostOperationCompleted(SendOrPostCallback, Object) en Post(SendOrPostCallback, Object) aanroepen asynchroon zijn, zodat klassebibliotheekproviders zich niet hoeven bezig te houden met potentiële stack-overloop als ze asynchroon gedrag aannemen in een bepaald toepassingsmodel dat synchroon verloopt.

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 het SynchronizationContext object op dat is doorgegeven aan de constructor.

UserSuppliedState

Hiermee wordt een object opgehaald of ingesteld dat wordt gebruikt om een asynchrone bewerking uniek te identificeren.

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
Finalize()

Hiermee voltooit u de asynchrone bewerking.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
OperationCompleted()

Hiermee wordt de levensduur van een asynchrone bewerking beëindigd.

Post(SendOrPostCallback, Object)

Roept een gemachtigde aan voor de thread of context die geschikt is voor het toepassingsmodel.

PostOperationCompleted(SendOrPostCallback, Object)

Hiermee wordt de levensduur van een asynchrone bewerking beëindigd.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook