Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

AsyncOperation-Klasse

Verfolgt die Lebensdauer eines asynchronen Vorgangs.

Namespace: System.ComponentModel
Assembly: System (in system.dll)

public sealed class AsyncOperation
public final class AsyncOperation
public final class AsyncOperation
Nicht zutreffend.

Wenn Sie eine Klasse entsprechend Übersicht über ereignisbasierte asynchrone Muster implementieren, müssen Sie möglicherweise die Lebensdauer der einzelnen asynchronen Vorgänge verfolgen, die in einer Instanz der Klasse aufgerufen wurden. Die AsyncOperation-Klasse bietet Möglichkeiten, den Fortschritt einer asynchronen Aufgabe zu verfolgen und darüber zu berichten.

In der folgenden Liste werden verschiedene Möglichkeiten der Verwendung eines AsyncOperation-Objekts dargestellt:

  • Rufen Sie Post vom asynchronen Worker-Code auf, um dem Client über Fortschritt und Zwischenergebnisse zu berichten.

  • Rufen Sie PostOperationCompleted auf, um anzugeben, dass eine asynchrone Aufgabe abgeschlossen wurde, oder um eine ausstehende asynchrone Aufgabe abzubrechen.

Die Klasse sollte ein AsyncOperation-Objekt für jede asynchrone Aufgabe abrufen, indem sie AsyncOperationManager.CreateOperation aufruft, wenn die Aufgabe beginnt. Damit der Client unterschiedliche asynchrone Aufgaben unterscheiden kann, verwendet AsyncOperationManager.CreateOperation einen Parameter für ein eindeutiges, vom Client bereitgestelltes Token, das zur UserSuppliedState-Eigenschaft wird. Sie kann dann über Clientcode für die Identifikation der bestimmten asynchronen Aufgabe verwendet werden, die Fortschritt oder Abschlussereignisse auslöst.

HinweisHinweis:

Das auf diese Klasse angewendete HostProtectionAttribute-Attribut besitzt den Resources-Eigenschaftenwert SharedState. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder eines URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.

Hinweise zur Vererbung: In einer Implementierung muss sichergestellt werden, dass PostOperationCompleted und Post asynchron aufgerufen werden, damit Klassenbibliothekanbieter sich nicht mit möglichen Stapelüberläufen beschäftigen müssen, wenn sie von einem asynchronen Verhalten in einem bestimmen Anwendungsmodell ausgehen, das sich als synchron herausstellt. Weitere Informationen über das Implementieren von asynchronen Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Entwurfsmusters.

Im folgenden Codebeispiel wird die Verwendung eines AsyncOperation-Objekts zur Verfolgung der Lebensdauer asynchroner Vorgänge veranschaulicht. Dieses Codebeispiel ist Teil eines umfangreicheren Beispiels für die System.ComponentModel.AsyncOperationManager-Klasse.

Eine vollständige Codeauflistung finden Sie unter Gewusst wie: Implementieren einer Komponente, die das ereignisbasierte asynchrone Muster unterstützt. Eine vollständige Codeauflistung eines Clientformulars finden Sie unter Gewusst wie: Implementieren eines Clients des ereignisbasierten asynchronen Musters.

// 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 void CalculatePrimeAsync(int numberToTest, Object taskId)
{
    // Create an AsyncOperation for taskId.
    AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(taskId);
    synchronized (userStateToLifetime.get_SyncRoot()) 
    {
        // Multiple threads will access the task dictionary,
        // so it must be locked to serialize access.
        if (userStateToLifetime.Contains(taskId)) {
            throw new ArgumentException("Task ID parameter must be unique", 
                "taskId");
        }

        userStateToLifetime.set_Item(taskId, asyncOp);
    }

    // Start the asynchronous operation.
    WorkerEventHandler workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(
        numberToTest, 
        asyncOp, 
        null, 
        null);
} 

System.Object
  System.ComponentModel.AsyncOperation
Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows 98, Windows Server 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 wird unter Windows Vista, Microsoft Windows XP SP2 und Windows Server 2003 SP1 unterstützt.

.NET Framework

Unterstützt in: 3.0, 2.0
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
© 2013 Microsoft. Alle Rechte vorbehalten.