AsyncOperationManager.CreateOperation(Object) Method

Definition

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

public:
 static System::ComponentModel::AsyncOperation ^ CreateOperation(System::Object ^ userSuppliedState);
public static System.ComponentModel.AsyncOperation CreateOperation (object userSuppliedState);
static member CreateOperation : obj -> System.ComponentModel.AsyncOperation
Public Shared Function CreateOperation (userSuppliedState As Object) As AsyncOperation

Parameters

userSuppliedState
Object

작업 ID와 같은 클라이언트 상태 정보와 특정 비동기 작업을 사용 하 여 연결 하는 데 사용 되는 개체입니다.An object used to associate a piece of client state, such as a task ID, with a particular asynchronous operation.

Returns

AsyncOperation

비동기 메서드 호출의 기간을 추적하는 데 사용할 수 있는 AsyncOperation입니다.An AsyncOperation that you can use to track the duration of an asynchronous method invocation.

Examples

다음 코드 예제에서는 CreateOperation 메서드를 사용 하 여 비동기 작업의 기간을 추적 하는 System.ComponentModel.AsyncOperation을 만드는 방법을 보여 줍니다.The following code example demonstrates using the CreateOperation method to create an System.ComponentModel.AsyncOperation for tracking the duration of asynchronous operations. 이 코드 예제는에 대해 제공 된 큰 예제의 일부는 AsyncOperationManager 클래스입니다.This code example is part of a larger example provided for the AsyncOperationManager class.

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

합니다 CreateOperation 메서드가 반환 되는 System.ComponentModel.AsyncOperation 특정 비동기 작업의 기간을 추적 하 고 애플리케이션 모델은 작업이 완료 될 때 경고를 사용할 수 있는 합니다.The CreateOperation method returns an System.ComponentModel.AsyncOperation that you can use to track the duration of a particular asynchronous operation and to alert the application model when the operation completes. 작업을 종료 하지 않고 진행률 업데이트 및 증분 결과 게시 하려면 사용할 수 있습니다.You can also use it to post progress updates and incremental results without terminating the operation. System.ComponentModel.AsyncOperation 이러한 호출을 적절 한 스레드 또는 애플리케이션 모델에 대 한 상황에 맞는 올바르게 마샬링해야 합니다.The System.ComponentModel.AsyncOperation will correctly marshal these calls to the appropriate thread or context for the application model.

이벤트 기반 비동기 패턴을 지 원하는 클래스를 구현 하는 경우 클래스는 MethodNameAsync 메서드가 호출 될 때마다 CreateOperation를 호출 해야 합니다.If you implement a class that supports the Event-based Asynchronous Pattern, your class should call CreateOperation each time your MethodNameAsync method is called. 메서드를 호출 하는 클라이언트 애플리케이션에서 사용할 수는 userSuppliedState 매개 변수를 각 호출을 비동기 작업을 실행 하는 동안 발생 하는 이벤트를 구분할를 고유 하 게 식별 합니다.The client application that makes calls to the method can use the userSuppliedState parameter to uniquely identify each invocation, so as to distinguish events raised during the execution of the asynchronous operation.

Caution

클라이언트 코드는 userSuppliedState 매개 변수에 대 한 고유한 값을 제공 해야 합니다.Client code must provide a unique value for the userSuppliedState parameter. 고유 하지 않은 작업 Id는 진행률 및 기타 이벤트를 올바르게 보고 구현을 발생할 수 있습니다.Non-unique task IDs may cause your implementation to report progress and other events incorrectly. 코드에서 고유 하지 않은 작업 ID를 확인 하 고 검색 된 경우 System.ArgumentException를 throw 해야 합니다.Your code should check for a non-unique task ID and throw an System.ArgumentException if one is detected.

코드는 CreateOperation에서 반환 되는 모든 System.ComponentModel.AsyncOperation를 추적 하 고 해당 하는 기본 비동기 작업에서 개체를 사용 하 여 업데이트를 게시 하 고 작업을 종료 해야 합니다.Your code should track every System.ComponentModel.AsyncOperation returned by CreateOperation and use the object in the corresponding underlying asynchronous operation to post updates and terminate the operation. 이 추적은 System.ComponentModel.AsyncOperation를 대리자 간의 매개 변수로 전달 하는 것 처럼 간단할 수 있습니다.This tracking can be as simple as passing the System.ComponentModel.AsyncOperation as a parameter among delegates. 보다 정교한 디자인에서 클래스는 System.ComponentModel.AsyncOperation 개체의 컬렉션을 유지 관리 하 고 태스크가 시작 될 때 개체를 추가 하 고 작업이 완료 되거나 취소 될 때 개체를 제거할 수 있습니다.In more sophisticated designs, your class can maintain a collection of System.ComponentModel.AsyncOperation objects, adding objects when tasks are started and removing them when tasks are completed or canceled. 이 방법을 사용 하면 고유한 userSuppliedState 매개 변수 값을 확인할 수 있으며, 여러 동시 호출을 지 원하는 클래스를 사용할 때 사용 해야 하는 메서드입니다.This approach allows you to check for unique userSuppliedState parameter values, and is the method you should use when working with classes that support multiple concurrent invocations.

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

Applies to

See also