AsyncOperationManager 클래스

정의

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

예제

다음 코드 예제는 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 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 클래스에 메서드 하나가 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

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

메서드

CreateOperation(Object)

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

적용 대상

추가 정보