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. これらのうちの1つは、アプリケーションモデルに適したスレッドまたはコンテキスト (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). は、によってサポートされるすべての.NET Framework.NET Frameworkアプリケーションモデルで正常に動作するクラスを作成するための便利な方法を提供します。AsyncOperationManagerThe AsyncOperationManager provides a convenient way to create a class that runs properly under all application models supported by the .NET Framework.NET Framework.

クラスには、というCreateOperation1 つのメソッドSystem.ComponentModel.AsyncOperationがあります。これは、特定の非同期タスクの継続時間を追跡するために使用できるを返します。 AsyncOperationManagerThe 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.

適用対象

こちらもご覧ください