AsyncOperationManager AsyncOperationManager AsyncOperationManager AsyncOperationManager Class

定義

非同期メソッドの呼び出しをサポートするクラスのコンカレンシーの管理を提供します。Provides concurrency management for classes that support asynchronous method calls. このクラスは継承できません。This class cannot be inherited.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
継承
AsyncOperationManagerAsyncOperationManagerAsyncOperationManagerAsyncOperationManager

次のコード例に示しますを使用して、AsyncOperationManager任意のアプリケーション モデルの非同期操作をサポートするクラスを作成するクラス。The following code example demonstrates using the AsyncOperationManager class to create a class that supports asynchronous operations for any application model. 素数があるかどうかを判断する数をテストするクラスを実装する方法を示します。It shows how to implement a class that tests a number to determine whether it is prime. 別のスレッドでは、そのため、この計算は時間がかかり、できます。This calculation can be time consuming, so it is done on a separate thread. 進行状況レポート、インクリメンタル結果、および完了通知によって処理されます、AsyncOperationクラスにより、適切なスレッドまたはコンテキストで、クライアントのイベント ハンドラーが呼び出されます。Progress reports, incremental results, and completion notifications are handled by the AsyncOperation class, which ensures that the client's event handlers are called on the proper thread or context.

完全なコード一覧については、次を参照してください。方法。イベントベースの非同期パターンをサポートするコンポーネントを実装する」を参照してください。For a full code listing, see How to: Implement a Component That Supports the Event-based Asynchronous Pattern. クライアントの完全なコード一覧については、次を参照してください。方法。イベントベースの非同期パターンのクライアントを実装する」をご覧ください。For a full code listing of a client form, see How to: Implement a Client of the Event-based Asynchronous Pattern.

// 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

注釈

クラスがに従って非同期動作を提供する必要があるかどうか、 - イベント ベースの非同期パターンの概要多数の同時実行管理の問題が発生します。If your class needs to provide asynchronous behavior according to the Event-based Asynchronous Pattern Overview, you will encounter a number of concurrency management issues. これは特に、スレッドまたは、アプリケーション モデルの適切なコンテキストでイベント ハンドラーを呼び出すことを確認するための要件 (たとえば、Windows フォーム アプリケーション、ASP.NETASP.NETアプリケーションやコンソール アプリケーション、)。Among these is the requirement to ensure that event handlers are called on a thread or context that is appropriate for the application model (for example, Windows Forms applications, ASP.NETASP.NET applications, console applications, and so on). AsyncOperationManagerでサポートされているすべてのアプリケーション モデルが正しく動作するクラスを作成する便利な手段を提供します、.NET Framework.NET Frameworkします。The AsyncOperationManager provides a convenient way to create a class that runs properly under all application models supported by the .NET Framework.NET Framework.

AsyncOperationManagerクラスが 1 つのメソッド、 CreateOperation、返された、System.ComponentModel.AsyncOperation特定の非同期タスクの実行時間を追跡するために使用できます。The AsyncOperationManager class has one method, CreateOperation, which returns an System.ComponentModel.AsyncOperation that can be used to track the duration of a particular asynchronous task. System.ComponentModel.AsyncOperationのタスクが完了すると、タスクを使用して、クライアントに通知することができます。The System.ComponentModel.AsyncOperation for a task can be used to alert clients when a task completes. 操作を終了せず、進行状況の更新およびインクリメンタル結果を投稿することにも使用できます。It can also be used to post progress updates and incremental results without terminating the operation.

非同期クラスの実装の詳細については、次を参照してください。イベント ベースの非同期パターンを実装するします。For more information about implementing asynchronous classes, see Implementing the Event-based Asynchronous Pattern.

プロパティ

SynchronizationContext SynchronizationContext SynchronizationContext SynchronizationContext

非同期操作の同期コンテキストを取得または設定します。Gets or sets the synchronization context for the asynchronous operation.

メソッド

CreateOperation(Object) CreateOperation(Object) CreateOperation(Object) CreateOperation(Object)

特定の非同期操作の存続期間を追跡するために使用する AsyncOperation を返します。Returns an AsyncOperation for tracking the duration of a particular asynchronous operation.

適用対象

こちらもご覧ください