Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

AsyncOperationManager-Klasse

Stellt Parallelitätsverwaltung für Klassen bereit, die asynchrone Methodenaufrufe unterstützen. Die Klasse erlaubt keine Vererbung.

System.Object
  System.ComponentModel.AsyncOperationManager

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

[HostProtectionAttribute(SecurityAction.LinkDemand, SharedState = true)]
public static class AsyncOperationManager

Der AsyncOperationManager-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche EigenschaftStatischer MemberSynchronizationContextRuft den Synchronisierungskontext für den asynchronen Vorgang ab oder legt diesen fest.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeStatischer MemberCreateOperationGibt für die Überwachung der Dauer eines bestimmten asynchronen Vorgangs eine System.ComponentModel.AsyncOperation zurück.
Zum Seitenanfang

Wenn Ihre Klasse entsprechend Übersicht über ereignisbasierte asynchrone Muster ein asynchrones Verhalten bereitstellen muss, werden Sie auf eine Reihe von Problemen hinsichtlich der Parallelitätsverwaltung stoßen. Dazu gehört, dass sichergestellt sein muss, dass Ereignishandler auf einem Thread oder Kontext aufgerufen werden, der für das Anwendungsmodell geeignet ist (z. B. Windows Forms-Anwendungen, ASP.NET-Anwendungen, Konsolenanwendungen). Mit dem AsyncOperationManager kann eine Klasse auf einfache Weise erstellt werden, die problemlos unter allen von .NET Framework unterstützten Anwendungsmodellen ausgeführt wird.

Die AsyncOperationManager-Klasse verfügt über die Methode CreateOperation, die eine System.ComponentModel.AsyncOperation zurückgibt, mit der die Dauer einer bestimmten asynchronen Aufgabe nachverfolgt werden kann. Die System.ComponentModel.AsyncOperation für eine Aufgabe kann dazu verwendet werden, Clients über die Beendigung einer Aufgabe zu benachrichtigen. Er kann auch dazu verwendet werden, Fortschrittsaktualisierungen und inkrementelle Ergebnisse zu versenden, ohne den Vorgang zu beenden.

Weitere Informationen über das Implementieren von asynchronen Klassen finden Sie unter Implementieren des ereignisbasierten asynchronen Entwurfsmusters.

HinweisHinweis

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

Im folgenden Codebeispiel wird anhand der AsyncOperationManager-Klasse die Erstellung einer Klasse veranschaulicht, die asynchrone Vorgänge für jedes beliebige Anwendungsmodell unterstützt. Es wird gezeigt, wie eine Klasse implementiert wird, die eine Zahl daraufhin untersucht, ob es sich dabei um eine Primzahl handelt. Diese Berechnung kann zeitaufwändig sein und wird deshalb auf einem separaten Thread ausgeführt. Fortschrittsberichte, inkrementelle Ergebnisse und Beendigungsbenachrichtigungen werden von der AsyncOperation-Klasse behandelt, die sicherstellt, dass die Ereignishandler des Clients im richtigen Thread oder Kontext aufgerufen werden.

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);
}


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.
Anzeigen: