AsyncOperationManagerとは? わかりやすく解説

AsyncOperationManager クラス

メモ : このクラスは、.NET Framework version 2.0 で新しく追加されたものです。

非同期メソッドの呼び出しをサポートするクラスに同時実行管理を提供します。このクラスは継承できません。

名前空間: System.ComponentModel
アセンブリ: System (system.dll 内)
構文構文

Public NotInheritable Class
 AsyncOperationManager
public static class AsyncOperationManager
public ref class AsyncOperationManager abstract
 sealed
public final class AsyncOperationManager
public final class AsyncOperationManager
解説解説

イベントベースの非同期パターンの概要に従ってクラスで非同期動作を提供する必要がある場合、同時実行管理の問題が多数発生します。このような問題の 1 つに、アプリケーション モデル (Windows フォーム アプリケーション、ASP.NET アプリケーション、コンソール アプリケーションなど) に適したスレッドまたはコンテキストでイベント ハンドラを呼び出す必要があるという要件があります。AsyncOperationManager を使用すると、.NET Framework でサポートされているすべてのアプリケーション モデル下で適切に実行されるクラスを簡単に作成できます。

AsyncOperationManager クラスには、特定の非同期タスクの存続期間を追跡するために使用できる System.ComponentModel.AsyncOperation を返す、CreateOperation という 1 つのメソッドが用意されています。タスクの System.ComponentModel.AsyncOperation は、タスクの完了時にクライアントに通知を行うために使用できます。また、操作を終了せずに、進行状況の更新やインクリメントの結果をポストするためにも使用できます。

非同期クラスの実装方法の詳細については、「イベントベースの非同期パターンの実装」を参照してください。

メモメモ

このクラスに適用される HostProtectionAttribute 属性の Resources プロパティの値は、SharedState です。HostProtectionAttribute は、デスクトップ アプリケーション (一般的には、アイコンをダブルクリック、コマンドを入力、またはブラウザに URL を入力して起動するアプリケーション) には影響しません。詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。

使用例使用例

AsyncOperationManager クラスを使用して、任意のアプリケーション モデルの非同期操作をサポートするクラスを作成するコード例を次に示します。この例では、数値をテストして素数かどうかをテストするクラスの実装方法を示します。この計算は時間がかかる場合があるため、別のスレッドで行います。進行状況のレポート、インクリメントの結果、および完了通知は、クライアントのイベント ハンドラが適切なスレッドまたはコンテキストで呼び出されるようにする AsyncOperation クラスによって処理されます。

完全なコードの一覧については、「方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する」を参照してください。クライアント フォームのコード全体については、「方法 : イベントベースの非同期パターンのクライアントを実装する」を参照してください。

' This method starts the 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.
    workerDelegate = New WorkerEventHandler( _
        AddressOf CalculateWorker)
    workerDelegate.BeginInvoke( _
        numberToTest, _
        asyncOp, _
        completionMethodDelegate, _
        Nothing, _
        Nothing)

End Sub
// This method starts the 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.
    workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(
        numberToTest,
        asyncOp,
        completionMethodDelegate,
        null,
        null);
}
public void CalculatePrimeAsync(int
 numberToTest, Object taskId)
{
    // State must be unique.
    AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(taskId);
    synchronized (userStateToLifetime.get_SyncRoot()) {
        if (userStateToLifetime.Contains(taskId)) {
            throw new ArgumentException("Task ID parameter
 must be unique", 
                "taskId");
        }
        userStateToLifetime.set_Item(taskId, asyncOp);
    }
    // Start the asynchronous operation.
    workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(numberToTest, asyncOp, 
        completionMethodDelegate, null, null);
} //CalculatePrimeAsync
public void CalculatePrimeAsync(int
 numberToTest, Object taskId)
{
    // State must be unique.
    AsyncOperation asyncOp = AsyncOperationManager.CreateOperation(taskId);
    synchronized (userStateToLifetime.get_SyncRoot()) {
        if (userStateToLifetime.Contains(taskId)) {
            throw new System.ArgumentException(
                "Task ID parameter must be unique", "taskId");
        }
        userStateToLifetime.set_Item(taskId, asyncOp);
    }
    // Start the asynchronous operation.
    workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(numberToTest, asyncOp, 
        completionMethodDelegate, null, null);
} //CalculatePrimeAsync
継承階層継承階層
System.Object
  System.ComponentModel.AsyncOperationManager
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

AsyncOperationManager プロパティ


AsyncOperationManager メソッド


パブリック メソッドパブリック メソッド

プロテクト メソッドプロテクト メソッド
参照参照

関連項目

AsyncOperationManager クラス
System.ComponentModel 名前空間
AsyncOperation クラス

その他の技術情報

イベントベースの非同期パターンの実装
マネージ スレッド処理の実施

AsyncOperationManager メンバ

非同期メソッドの呼び出しをサポートするクラスに同時実行管理を提供します。このクラスは継承できません。

AsyncOperationManager データ型で公開されるメンバを以下の表に示します。


パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ SynchronizationContext 非同期操作の同期コンテキストを取得または設定します。
パブリック メソッドパブリック メソッド
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

AsyncOperationManager クラス
System.ComponentModel 名前空間
AsyncOperation クラス

その他の技術情報

イベントベースの非同期パターンの実装
マネージ スレッド処理の実施



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「AsyncOperationManager」の関連用語

AsyncOperationManagerのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



AsyncOperationManagerのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS