AsyncOperationManager クラス
アセンブリ: System (system.dll 内)


イベントベースの非同期パターンの概要に従ってクラスで非同期動作を提供する必要がある場合、同時実行管理の問題が多数発生します。このような問題の 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.ComponentModel.AsyncOperationManager


Windows 98, Windows 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
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


AsyncOperationManager プロパティ


関連項目
AsyncOperationManager クラスSystem.ComponentModel 名前空間
AsyncOperation クラス
その他の技術情報
イベントベースの非同期パターンの実装マネージ スレッド処理の実施
AsyncOperationManager メソッド

名前 | 説明 | |
---|---|---|
![]() | CreateOperation | 特定の非同期操作の存続期間を追跡するために使用する System.ComponentModel.AsyncOperation を返します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

関連項目
AsyncOperationManager クラスSystem.ComponentModel 名前空間
AsyncOperation クラス
その他の技術情報
イベントベースの非同期パターンの実装マネージ スレッド処理の実施
AsyncOperationManager メンバ
非同期メソッドの呼び出しをサポートするクラスに同時実行管理を提供します。このクラスは継承できません。
AsyncOperationManager データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | CreateOperation | 特定の非同期操作の存続期間を追跡するために使用する System.ComponentModel.AsyncOperation を返します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

関連項目
AsyncOperationManager クラスSystem.ComponentModel 名前空間
AsyncOperation クラス
その他の技術情報
イベントベースの非同期パターンの実装マネージ スレッド処理の実施
- AsyncOperationManagerのページへのリンク