AsyncOperationとは? わかりやすく解説

AsyncOperation クラス

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

非同期操作の有効期間を追跡します。

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

Public NotInheritable Class
 AsyncOperation
Dim instance As AsyncOperation
public sealed class AsyncOperation
public ref class AsyncOperation sealed
public final class AsyncOperation
public final class AsyncOperation
解説解説

イベントベースの非同期パターンの概要に従ってクラスを実装する場合、使用するクラスのインスタンスで呼び出される各非同期操作の有効期間を追跡することが必要な場合があります。AsyncOperation クラスを使用すると、非同期タスクの進行状況を追跡して報告できます。

AsyncOperation オブジェクトの使用方法を次に示します。

クラスでは、各タスクの開始時に AsyncOperationManager.CreateOperation を呼び出すことによって、各非同期タスクの AsyncOperation オブジェクトを取得する必要があります。クライアントが個々の非同期タスクを区別できるようにするために、AsyncOperationManager.CreateOperation は、クライアントが提供する一意のトークンに対するパラメータを取得します。これは、UserSuppliedState プロパティになります。クライアント コードは、このプロパティを使用して、進行状況イベントまたは完了イベントを発生させる特定の非同期タスクを識別できます。

メモメモ

このクラスに適用される HostProtectionAttribute 属性の Resources プロパティの値は、SharedState です。HostProtectionAttribute は、デスクトップ アプリケーション (一般的には、アイコンをダブルクリック、コマンドを入力、またはブラウザに URL を入力して起動するアプリケーション) には影響しません。詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。

継承時の注意 実装側は、PostOperationCompleted 呼び出しと Post 呼び出しを確実に非同期にする必要があります。これにより、クラス ライブラリ プロバイダは、同期が発生する特定のアプリケーション モデルで非同期動作を想定している場合に、スタック オーバーフローが発生する可能性を考慮する必要はなくなります。 非同期クラスの実装方法の詳細については、「イベントベースの非同期パターンの実装」を参照してください。

使用例使用例

AsyncOperation オブジェクトを使用して、非同期操作の有効期間を追跡するコード例を次に示します。このコード例は、System.ComponentModel.AsyncOperationManager クラスのトピックで取り上げているコード例の一部分です。

完全なコードの一覧については、「方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する」を参照してください。クライアント フォームのコード全体については、「方法 : イベントベースの非同期パターンのクライアントを実装する」を参照してください。

' 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
継承階層継承階層
System.Object
  System.ComponentModel.AsyncOperation
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

AsyncOperation プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ SynchronizationContext コンストラクタに渡された SynchronizationContext オブジェクトを取得します。
パブリック プロパティ UserSuppliedState 非同期操作を一意に識別するために使用するオブジェクトを取得または設定します。
参照参照

関連項目

AsyncOperation クラス
System.ComponentModel 名前空間
System.ComponentModel.AsyncOperationManager

その他の技術情報

マネージ スレッド処理の実施
方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する

AsyncOperation メソッド


パブリック メソッドパブリック メソッド

プロテクト メソッドプロテクト メソッド
参照参照

関連項目

AsyncOperation クラス
System.ComponentModel 名前空間
System.ComponentModel.AsyncOperationManager

その他の技術情報

マネージ スレッド処理の実施
方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する

AsyncOperation メンバ

非同期操作の有効期間を追跡します。

AsyncOperation データ型で公開されるメンバを以下の表に示します。


パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ SynchronizationContext コンストラクタに渡された SynchronizationContext オブジェクトを取得します。
パブリック プロパティ UserSuppliedState 非同期操作を一意に識別するために使用するオブジェクトを取得または設定します。
パブリック メソッドパブリック メソッド
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

AsyncOperation クラス
System.ComponentModel 名前空間
System.ComponentModel.AsyncOperationManager

その他の技術情報

マネージ スレッド処理の実施
方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する



英和和英テキスト翻訳

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

辞書ショートカット

すべての辞書の索引

「AsyncOperation」の関連用語

AsyncOperationのお隣キーワード
検索ランキング

   

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



AsyncOperationのページの著作権

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

©2026 GRAS Group, Inc.RSS