AsyncOperation クラス
アセンブリ: System (system.dll 内)
構文
解説イベントベースの非同期パターンの概要に従ってクラスを実装する場合、使用するクラスのインスタンスで呼び出される各非同期操作の有効期間を追跡することが必要な場合があります。AsyncOperation クラスを使用すると、非同期タスクの進行状況を追跡して報告できます。
AsyncOperation オブジェクトの使用方法を次に示します。
クラスでは、各タスクの開始時に AsyncOperationManager.CreateOperation を呼び出すことによって、各非同期タスクの AsyncOperation オブジェクトを取得する必要があります。クライアントが個々の非同期タスクを区別できるようにするために、AsyncOperationManager.CreateOperation は、クライアントが提供する一意のトークンに対するパラメータを取得します。これは、UserSuppliedState プロパティになります。クライアント コードは、このプロパティを使用して、進行状況イベントまたは完了イベントを発生させる特定の非同期タスクを識別できます。
メモ |
|---|
| このクラスに適用される HostProtectionAttribute 属性の Resources プロパティの値は、SharedState です。HostProtectionAttribute は、デスクトップ アプリケーション (一般的には、アイコンをダブルクリック、コマンドを入力、またはブラウザに URL を入力して起動するアプリケーション) には影響しません。詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。 |
使用例AsyncOperation オブジェクトを使用して、非同期操作の有効期間を追跡するコード例を次に示します。このコード例は、System.ComponentModel.AsyncOperationManager クラスのトピックで取り上げているコード例の一部分です。
完全なコードの一覧については、「方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する」を参照してください。クライアント フォームのコード全体については、「方法 : イベントベースの非同期パターンのクライアントを実装する」を参照してください。
' 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.AsyncOperation
スレッド セーフ
プラットフォーム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 によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照AsyncOperation プロパティ
パブリック プロパティ| 名前 | 説明 | |
|---|---|---|
| SynchronizationContext | コンストラクタに渡された SynchronizationContext オブジェクトを取得します。 |
| UserSuppliedState | 非同期操作を一意に識別するために使用するオブジェクトを取得または設定します。 |
参照AsyncOperation メソッド
パブリック メソッド| 名前 | 説明 | |
|---|---|---|
| Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
| GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
| GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
| OperationCompleted | 非同期操作の有効期間を終了します。 |
| Post | アプリケーション モデルに適したスレッドまたはコンテキストでデリゲートを呼び出します。 |
| PostOperationCompleted | 非同期操作の有効期間を終了します。 |
| ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
| ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
プロテクト メソッド| 名前 | 説明 | |
|---|---|---|
| Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
| MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
参照AsyncOperation メンバ
AsyncOperation データ型で公開されるメンバを以下の表に示します。
パブリック プロパティ| 名前 | 説明 | |
|---|---|---|
| SynchronizationContext | コンストラクタに渡された SynchronizationContext オブジェクトを取得します。 |
| UserSuppliedState | 非同期操作を一意に識別するために使用するオブジェクトを取得または設定します。 |
パブリック メソッド| 名前 | 説明 | |
|---|---|---|
| Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
| GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
| GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
| OperationCompleted | 非同期操作の有効期間を終了します。 |
| Post | アプリケーション モデルに適したスレッドまたはコンテキストでデリゲートを呼び出します。 |
| PostOperationCompleted | 非同期操作の有効期間を終了します。 |
| ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
| ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
プロテクト メソッド| 名前 | 説明 | |
|---|---|---|
| Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
| MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
参照- AsyncOperationのページへのリンク
.gif)