AsyncOperation クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
非同期操作の有効期間を追跡します。
public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
- 継承
-
AsyncOperation
例
次のコード例は、オブジェクトを AsyncOperation 使用して非同期操作の有効期間を追跡する方法を示しています。 このコード例は、System.ComponentModel.AsyncOperationManager クラスのために提供されている大規模な例の一部です。
完全なコード一覧については、「 方法: イベント ベースの非同期パターンをサポートするコンポーネントを実装する」を参照してください。 クライアント フォームの完全なコード 一覧については、「 方法: イベント ベースの非同期パターンのクライアントを実装する」を参照してください。
// 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 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.
Dim workerDelegate As New WorkerEventHandler( _
AddressOf CalculateWorker)
workerDelegate.BeginInvoke( _
numberToTest, _
asyncOp, _
Nothing, _
Nothing)
End Sub
注釈
イベント ベースの非同期パターンの概要に従ってクラスを実装する場合は、クラスのインスタンスで呼び出される各非同期操作の有効期間を追跡することが必要な場合があります。 このクラスは AsyncOperation 、非同期タスクの進行状況を追跡および報告する方法を提供します。
次の一覧は、オブジェクトを使用する方法を AsyncOperation 示しています。
進行状況と中間結果をクライアントに報告するには、非同期ワーカー コードから呼び出 Post します。
非同期タスクが完了したことを示すか、保留中の非同期タスクを取り消すには、呼び出します PostOperationCompleted。
クラスは、各タスクの開始時に AsyncOperation 呼び出 AsyncOperationManager.CreateOperation すことによって、非同期タスクごとにオブジェクトを取得する必要があります。 クライアントが個別の非同期タスクを区別できるようにするには、 AsyncOperationManager.CreateOperation 一意のクライアント指定トークンのパラメーターを受け取り、プロパティになります UserSuppliedState 。 その後、クライアント コードで進行状況イベントまたは完了イベントを発生させる特定の非同期タスクを識別するために使用できます。
注意 (継承者)
実装者は、クラス ライブラリ プロバイダーが同期的である特定の PostOperationCompleted(SendOrPostCallback, Object) アプリケーション モデルで非同期動作を想定している場合に、スタック オーバーフローの可能性を考慮する必要がないように、呼び出し Post(SendOrPostCallback, Object) が非同期であることを確認する必要があります。
非同期クラスの実装の詳細については、「 イベント ベースの非同期パターンの実装」を参照してください。
プロパティ
SynchronizationContext |
コンストラクターに渡された SynchronizationContext オブジェクトを取得します。 |
UserSuppliedState |
非同期操作を一意に識別するために使用するオブジェクトを取得または設定します。 |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
Finalize() |
非同期操作の終了処理を行います。 |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
OperationCompleted() |
非同期操作の有効期間を終了します。 |
Post(SendOrPostCallback, Object) |
アプリケーション モデルに適したスレッドまたはコンテキストでデリゲートを呼び出します。 |
PostOperationCompleted(SendOrPostCallback, Object) |
非同期操作の有効期間を終了します。 |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |