次の方法で共有


AsyncOperation クラス

定義

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

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
継承
AsyncOperation

次のコード例では、 オブジェクトを AsyncOperation 使用して非同期操作の有効期間を追跡する方法を示します。 このコード例は、System.ComponentModel.AsyncOperationManager クラスのために提供されている大規模な例の一部です。

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

// This method starts an 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.
    WorkerEventHandler workerDelegate = new WorkerEventHandler(CalculateWorker);
    workerDelegate.BeginInvoke(
        numberToTest,
        asyncOp,
        null,
        null);
}
' This method starts an 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.
    Dim workerDelegate As New WorkerEventHandler( _
        AddressOf CalculateWorker)

    workerDelegate.BeginInvoke( _
        numberToTest, _
        asyncOp, _
        Nothing, _
        Nothing)

End Sub

注釈

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

次の一覧は、オブジェクトを使用する方法を AsyncOperation 示しています。

  • 進行状況と中間結果をクライアントに報告するには、非同期ワーカー コードから を呼び出 Post します。

  • 非同期タスクが完了したことを示すか、保留中の非同期タスクを取り消すには、 を呼び出します PostOperationCompleted

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

注意 (継承者)

実装者は、 と Post(SendOrPostCallback, Object) の呼び出しが非同期であることを確認PostOperationCompleted(SendOrPostCallback, Object)する必要があります。これにより、クラス ライブラリ プロバイダーは、同期的に発生する特定のアプリケーション モデルで非同期動作を想定する場合に、スタック オーバーフローの可能性に関心を持つ必要がなくなります。

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

プロパティ

SynchronizationContext

コンストラクターに渡された SynchronizationContext オブジェクトを取得します。

UserSuppliedState

非同期操作を一意に識別するために使用するオブジェクトを取得または設定します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
Finalize()

非同期操作の終了処理を行います。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
OperationCompleted()

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

Post(SendOrPostCallback, Object)

アプリケーション モデルに適したスレッドまたはコンテキストでデリゲートを呼び出します。

PostOperationCompleted(SendOrPostCallback, Object)

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

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください