AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) メソッド

定義

非同期操作の有効期間を終了します。

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)

パラメーター

d
SendOrPostCallback

操作終了時に呼び出されるデリゲートをラップする SendOrPostCallback オブジェクト。

arg
Object

d パラメーターに格納されているデリゲートの引数。

例外

OperationCompleted() は、このタスクに対して既に呼び出されています。

dnullです。

次のコード例では、 メソッドを PostOperationCompleted 使用して非同期操作の有効期間を終了する方法を示します。 このコード例は、System.ComponentModel.AsyncOperationManager クラスのために提供されている大規模な例の一部です。

// This method cancels a pending asynchronous operation.
public void CancelAsync(object taskId)
{
    AsyncOperation asyncOp = userStateToLifetime[taskId] as AsyncOperation;
    if (asyncOp != null)
    {   
        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。 パラメーター値として、オブジェクトまたは System.ComponentModel.AsyncCompletedEventArgs オブジェクトを使用AsyncOperationできます。 または、追加の状態ストレージを提供する場合は、 クラスから派生したクラスのインスタンスを System.ComponentModel.AsyncCompletedEventArgs 使用できます。

注意 (継承者)

継承者は呼び出しを PostOperationCompleted(SendOrPostCallback, Object) 非同期にする必要があります。これにより、クラス ライブラリ プロバイダーは、非同期であると見なされるが、特定のアプリケーション モデルが同期的になる場合に、スタック オーバーフローの可能性に関心を持つ必要がなくなります。 メソッドは"有効期間を終了する" 呼び出しとして解釈する必要があります。つまり、実装では、アプリケーション モデルに適した処理を行う必要があります。 たとえば、ASP.NET は、未処理の非同期操作の数を減らします。 これにより、操作が完了したので、後続の呼び出しが失敗するような状態になります。

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

適用対象

こちらもご覧ください