AsyncOperation.PostOperationCompleted メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > AsyncOperation.PostOperationCompleted メソッドの意味・解説 

AsyncOperation.PostOperationCompleted メソッド

メモ : このメソッドは、.NET Framework version 2.0 で新しく追加されたものです。

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

名前空間: System.ComponentModel
アセンブリ: System (system.dll 内)
構文構文

Public Sub PostOperationCompleted ( _
    d As SendOrPostCallback, _
    arg As Object _
)
Dim instance As AsyncOperation
Dim d As SendOrPostCallback
Dim arg As Object

instance.PostOperationCompleted(d, arg)
public void PostOperationCompleted (
    SendOrPostCallback d,
    Object arg
)
public:
void PostOperationCompleted (
    SendOrPostCallback^ d, 
    Object^ arg
)
public void PostOperationCompleted (
    SendOrPostCallback d, 
    Object arg
)
public function PostOperationCompleted (
    d : SendOrPostCallback, 
    arg : Object
)

パラメータ

d

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

arg

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

例外例外
例外の種類条件

InvalidOperationException

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

ArgumentNullException

d が null 参照 (Visual Basic では Nothing) です。

解説解説

PostOperationCompleted メソッドを呼び出して、非同期操作の有効期間を終了します。特定のタスクに対してこのメソッドを呼び出した後に、対応する AsyncOperation オブジェクトを呼び出すと例外が発生します。

d パラメータは、完了、キャンセル、またはタスクのエラーによって、タスクの有効期間が終了したときに、クラスで呼び出す必要のあるデリゲートをラップします。AsyncOperation オブジェクトは、デリゲートがアプリケーション モデルに適したスレッドまたはコンテキストで確実に呼び出されるようにします。デリゲートは、非同期タスクの有効期間が終了したことをクライアントに通知するイベントを発生させることもできます。

arg パラメータは、完了デリゲート d にステータス情報を渡すために使用されます。パラメータ値として、AsyncOperation オブジェクトを使用することも System.ComponentModel.AsyncCompletedEventArgs オブジェクトを使用することもできます。また、状態ストレージを追加する場合は、System.ComponentModel.AsyncCompletedEventArgs クラスから派生したクラスのインスタンスを使用することもできます。

継承時の注意 継承側は、PostOperationCompleted 呼び出しを非同期にする必要があります。これにより、クラス ライブラリ プロバイダが非同期を想定していても、特定のアプリケーション モデルで同期が発生する場合に、クラス ライブラリ プロバイダはスタック オーバーフローが発生する可能性を考慮する必要はなくなります。このメソッドは、"有効期間の終了" 呼び出しとして解釈される必要があります。これは、実装でアプリケーション モデルに適した操作を実行する必要があることを意味します。たとえば、ASP.NET では、保留状態の非同期操作のカウントをデクリメントします。また、操作は既に完了しているため、その操作に対する今後のすべての呼び出しが失敗するように、操作の状態を変更する必要があります。 非同期クラスの実装方法の詳細については、「イベントベースの非同期パターンの実装」を参照してください。

使用例使用例

PostOperationCompleted メソッドを使用して、非同期操作の有効期間を終了するコード例を次に示します。このコード例は、System.ComponentModel.AsyncOperationManager クラスのトピックで取り上げているコード例の一部分です。

import System.*;
import System.Collections.*;
import System.Collections.Specialized.*;
import System.ComponentModel.*;
import System.Threading.*;
' This method cancels a pending asynchronous operation.
Public Sub CancelAsync(ByVal
 taskId As Object)
    SyncLock userStateToLifetime.SyncRoot
        Dim obj As Object
 = userStateToLifetime(taskId)
        If Not (obj Is Nothing)
 Then
            Dim asyncOp As AsyncOperation =
 obj

            Dim numberToTest As Integer
 = 0
            Dim firstDivisor As Integer
 = 1
            Dim isPrime As Boolean
 = False
            Dim exception As Exception = Nothing
            Dim canceled As Boolean
 = True

            Dim e As New
 CalculatePrimeCompletedEventArgs( _
                numberToTest, _
                firstDivisor, _
                isPrime, _
                exception, _
                canceled, _
                asyncOp.UserSuppliedState)

            ' The asyncOp object is responsible for 
            ' marshalling the call to the proper 
            ' thread or context.
            asyncOp.PostOperationCompleted( _
            onCompletedDelegate, _
            e)
        End If
    End SyncLock

End Sub
// This method cancels a pending asynchronous operation.
public void CancelAsync(object taskId)
{
    lock (userStateToLifetime.SyncRoot)
    {
        object obj = userStateToLifetime[taskId];
        if (obj != null)
        {
            AsyncOperation asyncOp = obj as AsyncOperation;

            int numberToTest = 0;
            int firstDivisor = 1;
            bool isPrime = false;
            Exception exception = null;
            bool canceled = true;

            CalculatePrimeCompletedEventArgs e =
                new CalculatePrimeCompletedEventArgs(
                numberToTest,
                firstDivisor,
                isPrime,
                exception,
                canceled,
                asyncOp.UserSuppliedState);

            // The asyncOp object is responsible for 
            // marshaling the call to the proper 
            // thread or context.
            asyncOp.PostOperationCompleted(
                onCompletedDelegate,
                e);
        }
    }
}
public void CancelAsync(Object taskId)
{
    synchronized (userStateToLifetime.get_SyncRoot()) {
        Object obj = userStateToLifetime.get_Item(taskId);
        if (obj != null) {
            AsyncOperation asyncOp = (AsyncOperation)obj;

            int numberToTest = 0;
            int firstDivisor = 1;
            boolean isPrime = false;
            Exception exception = null;
            boolean cancelled = true;

            CalculatePrimeCompletedEventArgs e = 
                new CalculatePrimeCompletedEventArgs(numberToTest,
 
                firstDivisor, isPrime, exception, cancelled, 
                asyncOp.get_UserSuppliedState());
            // The asyncOp object is responsible for 
            // marshalling the call to the proper 
            // thread or context.
            asyncOp.PostOperationCompleted(onCompletedDelegate, e);
        }
    }
} //CancelAsync
public void CancelAsync(Object taskId)
{
    synchronized (userStateToLifetime.get_SyncRoot()) {
        Object obj = userStateToLifetime.get_Item(taskId);
        if (obj != null) {
            AsyncOperation asyncOp = (AsyncOperation)obj;
            int numberToTest = 0;
            int firstDivisor = 1;
            boolean isPrime = false;
            System.Exception exception = null;
            boolean cancelled = true;

            CalculatePrimeCompletedEventArgs e = 
                new CalculatePrimeCompletedEventArgs(numberToTest,
 
                firstDivisor, isPrime, exception, cancelled, 
                asyncOp.get_UserSuppliedState());
            // The asyncOp object is responsible for 
            // marshalling the call to the proper 
            // thread or context.
            asyncOp.PostOperationCompleted(onCompletedDelegate, e);
        }
    }
} //CancelAsync
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

AsyncOperation.PostOperationCompleted メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



AsyncOperation.PostOperationCompleted メソッドのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS