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

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

AsyncOperationManager.CreateOperation メソッド

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

特定の非同期操作の存続期間を追跡するために使用する System.ComponentModel.AsyncOperation を返します。

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

Public Shared Function CreateOperation
 ( _
    userSuppliedState As Object _
) As AsyncOperation
Dim userSuppliedState As Object
Dim returnValue As AsyncOperation

returnValue = AsyncOperationManager.CreateOperation(userSuppliedState)
public static AsyncOperation CreateOperation
 (
    Object userSuppliedState
)
public:
static AsyncOperation^ CreateOperation (
    Object^ userSuppliedState
)
public static AsyncOperation CreateOperation
 (
    Object userSuppliedState
)
public static function CreateOperation
 (
    userSuppliedState : Object
) : AsyncOperation

パラメータ

userSuppliedState

クライアント状態の一部 (タスク ID など) を特定の非同期操作に関連付けるために使用されるオブジェクト。

戻り値
非同期メソッドの呼び出しの存続期間を追跡するために使用できる AsyncOperation。

解説解説

CreateOperation メソッドは、特定の非同期操作の存続期間を追跡して操作完了時にアプリケーション モデルに通知を行うために使用できる System.ComponentModel.AsyncOperation を返します。また、操作を終了せずに、進行状況の更新やインクリメントの結果をポストするためにも使用できます。System.ComponentModel.AsyncOperation は、これらの呼び出しをアプリケーション モデルの適切なスレッドまたはコンテキストに正しくマーシャリングします。

イベント ベースの非同期パターンをサポートするクラスを実装する場合、MethodNameAsync メソッドが呼び出されるたびに、クラスは CreateOperation を呼び出す必要があります。メソッドを呼び出すクライアント アプリケーションは、userSuppliedState パラメータを使用して各呼び出しを一意に識別できます。したがって、非同期操作の実行中に発生したイベントを区別できます。

注意に関するメモ注意

クライアント コードは、userSuppliedState パラメータに一意の値を提供する必要があります。タスク ID が一意ではない場合、実装が進行状況やその他のイベントを誤って報告する可能性があります。コードによって、一意でないタスク ID が存在するかどうかをチェックし、このような ID が検出された場合は、System.ArgumentException をスローする必要があります。

コードは、CreateOperation によって返されるすべての System.ComponentModel.AsyncOperation を追跡し、基になる対応する非同期操作のオブジェクトを使用して、更新のポストと操作の終了を行う必要があります。この追跡は、System.ComponentModel.AsyncOperation をデリゲート間でパラメータとして渡すだけで簡単に行うことができます。より高度なデザインでは、クラスが System.ComponentModel.AsyncOperation オブジェクトのコレクションを維持し、タスクの起動時にオブジェクトを追加したり、タスクの完了時またはキャンセル時にオブジェクトを削除したりできます。この方法を使用すると、一意の userSuppliedState パラメータ値をチェックできます。また、複数の同時実行呼び出しをサポートするクラスを使用する場合には、この方法を使用する必要があります。

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

使用例使用例

CreateOperation メソッドを使用して、非同期操作の存続期間を追跡するために使用する System.ComponentModel.AsyncOperation を作成するコード例を次に示します。このコード例は、AsyncOperationManager クラスのトピックで取り上げているコード例の一部分です。

import System.*;
import System.Collections.*;
import System.Collections.Specialized.*;
import System.ComponentModel.*;
import System.Threading.*;
' 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
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照


このページでは「.NET Framework クラス ライブラリ リファレンス」からAsyncOperationManager.CreateOperation メソッドを検索した結果を表示しています。
Weblioに収録されているすべての辞書からAsyncOperationManager.CreateOperation メソッドを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からAsyncOperationManager.CreateOperation メソッド を検索

英和和英テキスト翻訳

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

辞書ショートカット

すべての辞書の索引

「AsyncOperationManager.CreateOperation メソッド」の関連用語

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

   

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



AsyncOperationManager.CreateOperation メソッドのページの著作権

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

©2026 GRAS Group, Inc.RSS