AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
非同期操作の有効期間を終了します。
public:
void PostOperationCompleted(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void PostOperationCompleted(System.Threading.SendOrPostCallback d, object arg);
public void PostOperationCompleted(System.Threading.SendOrPostCallback d, object? arg);
member this.PostOperationCompleted : System.Threading.SendOrPostCallback * obj -> unit
Public Sub PostOperationCompleted (d As SendOrPostCallback, arg As Object)
パラメーター
操作の終了時に呼び出されるデリゲートをラップする SendOrPostCallback オブジェクト。
- arg
- Object
d パラメーターに含まれるデリゲートの引数。
例外
OperationCompleted() は、このタスクに対して以前に呼び出されています。
d は nullです。
例
次のコード例では、 PostOperationCompleted メソッドを使用して非同期操作の有効期間を終了する方法を示します。 このコード例は、 System.ComponentModel.AsyncOperationManager クラスに提供されるより大きな例の一部です。
// This method cancels a pending asynchronous operation.
public void CancelAsync(object taskId)
{
if (userStateToLifetime[taskId] is AsyncOperation)
{
lock (userStateToLifetime.SyncRoot)
{
userStateToLifetime.Remove(taskId);
}
}
}
' This method cancels a pending asynchronous operation.
Public Sub CancelAsync(ByVal taskId As Object)
Dim obj As Object = userStateToLifetime(taskId)
If (obj IsNot Nothing) Then
SyncLock userStateToLifetime.SyncRoot
userStateToLifetime.Remove(taskId)
End SyncLock
End If
End Sub
注釈
PostOperationCompleted メソッドを呼び出して、非同期操作の有効期間を終了します。 特定のタスクに対してこのメソッドが呼び出されると、対応する AsyncOperation オブジェクトを呼び出すと例外が発生します。
d パラメーターは、タスクの完了、取り消し、または失敗が原因でタスクの有効期間が終了したときにクラスが呼び出すデリゲートをラップします。
AsyncOperation オブジェクトは、アプリケーション モデルに適したスレッドまたはコンテキストでデリゲートが確実に呼び出されるようにします。 必要に応じて、デリゲートは、非同期タスクの有効期間が終了したことをクライアントに通知するイベントを発生させることができます。
arg パラメーターは、完了デリゲート dに状態情報を渡すために使用されます。 パラメーター値として、 AsyncOperation オブジェクトまたは System.ComponentModel.AsyncCompletedEventArgs オブジェクトを使用できます。 または、追加の状態ストレージを提供する場合は、 System.ComponentModel.AsyncCompletedEventArgs クラスから派生したクラスのインスタンスを使用できます。
注意 (継承者)
継承子は PostOperationCompleted(SendOrPostCallback, Object) 呼び出しを非同期にする必要があります。そのため、クラス ライブラリ プロバイダーが非同期性を想定しているが、特定のアプリケーション モデルが同期的である場合に、スタック オーバーフローの可能性に気を付ける必要はありません。 メソッドは"有効期間の終了" 呼び出しとして解釈する必要があります。つまり、実装はアプリケーション モデルに適した処理を行う必要があります。 たとえば、ASP.NET は未処理の非同期操作の数を減らします。 これにより、操作が完了したので、後続の呼び出しが失敗する状態にすることもできます。
非同期クラスの実装の詳細については、「 イベント ベースの非同期パターンの実装」を参照してください。