AsyncOperation Класс

Определение

Отслеживает время выполнения асинхронной операции.Tracks the lifetime of an asynchronous operation.

public ref class AsyncOperation sealed
public sealed class AsyncOperation
type AsyncOperation = class
Public NotInheritable Class AsyncOperation
Наследование
AsyncOperation

Примеры

В следующем примере кода показано использование 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, передаваемый в конструктор.Gets the SynchronizationContext object that was passed to the constructor.

UserSuppliedState

Получает или задает объект, используемый для уникальной идентификации асинхронной операции.Gets or sets an object used to uniquely identify an asynchronous operation.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Finalize()

Завершает асинхронную операцию.Finalizes the asynchronous operation.

GetHashCode()

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
OperationCompleted()

Завершает выполнение асинхронной операции.Ends the lifetime of an asynchronous operation.

Post(SendOrPostCallback, Object)

Вызывает делегат для потока или контекста, соответствующего модели приложения.Invokes a delegate on the thread or context appropriate for the application model.

PostOperationCompleted(SendOrPostCallback, Object)

Завершает выполнение асинхронной операции.Ends the lifetime of an asynchronous operation.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Применяется к

Дополнительно