AsyncOperationManager Class

Definition

비동기 메서드 호출을 지원하는 클래스에 대한 동시성 관리 기능을 제공합니다.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
Inheritance
AsyncOperationManager

Examples

다음 코드 예제는 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

Remarks

클래스가 이벤트 기반 비동기 패턴 개요에 따라 비동기 동작을 제공 해야 하는 경우 많은 동시성 관리 문제가 발생할 수 있습니다.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 Forms 애플리케이션 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 클래스에는 특정 비동기 작업의 기간을 추적 하는 데 사용할 수 있는 System.ComponentModel.AsyncOperation를 반환 하는 CreateOperation메서드가 하나 있습니다.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.

Properties

SynchronizationContext

비동기 작업에 대 한 동기화 컨텍스트를 가져오거나 설정 합니다.Gets or sets the synchronization context for the asynchronous operation.

Methods

CreateOperation(Object)

특정 비동기 작업의 기간을 추적하기 위한 AsyncOperation을 반환합니다.Returns an AsyncOperation for tracking the duration of a particular asynchronous operation.

Applies to

See also