AsyncOperation AsyncOperation AsyncOperation AsyncOperation Class

정의

비동기 작업의 수명을 추적합니다.Tracks the lifetime of an asynchronous operation.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
상속
AsyncOperationAsyncOperationAsyncOperationAsyncOperation

예제

다음 코드 예제는 AsyncOperation 비동기 작업의 수명을 추적 하는 개체입니다.The following code example demonstrates using an AsyncOperation object to track the lifetime of asynchronous operations. 이 코드 예제는에 대해 제공 된 큰 예제의 일부는 System.ComponentModel.AsyncOperationManager 클래스입니다.This code example is part of a larger example provided for the System.ComponentModel.AsyncOperationManager class.

전체 코드 목록을 보려면 방법: 이벤트 기반 비동기 패턴을 지 원하는 구성 요소 구현을 참조하세요.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

설명

에 따라 클래스를 구현 하는 경우는 이벤트 기반 비동기 패턴 개요, 클래스의 인스턴스에서 호출 된 각 비동기 작업의 수명을 추적 해야 할 수 있습니다.When you implement a class according to the Event-based Asynchronous Pattern Overview, you may need to track the lifetime of each asynchronous operation invoked on an instance of your class. AsyncOperation 클래스를 추적 하 고 비동기 작업의 진행률을 보고 하는 방법을 제공 합니다.The AsyncOperation class provides ways to track and report the progress of an asynchronous task.

다음 목록에서는 사용 하는 방법을 식별을 AsyncOperation 개체:The following list identifies ways to use an AsyncOperation object:

  • 호출 클라이언트에 진행률 및 중간 결과 보고, Post 비동기 작업자 코드에서.To report progress and interim results to the client, call Post from your asynchronous worker code.

  • 비동기 작업 완료 되었음을 나타냅니다 또는 보류 중인 비동기 작업을 취소 하려면 호출 PostOperationCompleted합니다.To indicate that an asynchronous task has completed, or to cancel a pending asynchronous task, call PostOperationCompleted.

클래스를 가져와야는 AsyncOperation 를 호출 하 여 각 비동기 작업에 대 한 개체 AsyncOperationManager.CreateOperation 각 태스크를 시작할 때입니다.Your class should get an AsyncOperation object for each asynchronous task by calling AsyncOperationManager.CreateOperation when each task starts. 클라이언트가 별도 비동기 작업을 구별할 수 있도록 AsyncOperationManager.CreateOperation 는 고유 클라이언트 제공 토큰에 대 한 되는 매개 변수는 UserSuppliedState 속성입니다.To allow the client to distinguish separate asynchronous tasks, AsyncOperationManager.CreateOperation takes a parameter for a unique client-provided token, which becomes the UserSuppliedState property. 그런 다음 사용할 수 클라이언트 코드에서 진행률 또는 완료 이벤트를 발생 시킨 특정 비동기 작업을 식별 하 합니다.It can then be used by client code to identify the particular asynchronous task that is raising progress or completion events.

상속자 참고

구현 자가 있어야 합니다 PostOperationCompleted(SendOrPostCallback, Object)Post(SendOrPostCallback, Object) 호출이 비동기가 특정 애플리케이션에 비동기 동작 가정 하는 경우 잠재적인 스택 오버플로 클래스 라이브러리 공급자를 사용 하 여 고려할 필요가 없습니다 동기로 발생 하는 모델입니다.Implementers must ensure the PostOperationCompleted(SendOrPostCallback, Object) and Post(SendOrPostCallback, Object) invocations are asynchronous, so that class library providers do not need to concern themselves with potential stack overflows if they assume asynchronous behavior in a particular application model that happens to be synchronous.

비동기 클래스를 구현 하는 방법에 대 한 자세한 내용은 참조 하세요. 이벤트 기반 비동기 패턴 구현합니다.For more information about implementing asynchronous classes, see Implementing the Event-based Asynchronous Pattern.

속성

SynchronizationContext SynchronizationContext SynchronizationContext SynchronizationContext

생성자에 전달된 SynchronizationContext 개체를 가져옵니다.Gets the SynchronizationContext object that was passed to the constructor.

UserSuppliedState UserSuppliedState UserSuppliedState UserSuppliedState

비동기 작업을 고유하게 식별하는 데 사용되는 개체를 가져오거나 설정합니다.Gets or sets an object used to uniquely identify an asynchronous operation.

메서드

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

비동기 작업을 완료합니다.Finalizes the asynchronous operation.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
OperationCompleted() OperationCompleted() OperationCompleted() OperationCompleted()

비동기 작업의 수명을 끝냅니다.Ends the lifetime of an asynchronous operation.

Post(SendOrPostCallback, Object) Post(SendOrPostCallback, Object) Post(SendOrPostCallback, Object) Post(SendOrPostCallback, Object)

애플리케이션 모델에 적절한 스레드나 컨텍스트에서 대리자를 호출합니다.Invokes a delegate on the thread or context appropriate for the application model.

PostOperationCompleted(SendOrPostCallback, Object) PostOperationCompleted(SendOrPostCallback, Object) PostOperationCompleted(SendOrPostCallback, Object) PostOperationCompleted(SendOrPostCallback, Object)

비동기 작업의 수명을 끝냅니다.Ends the lifetime of an asynchronous operation.

ToString() ToString() ToString() ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(Inherited from Object)

적용 대상

추가 정보