AsyncOperation Класс

Определение

Отслеживает время существования асинхронной операции.

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

Примеры

В следующем примере кода показано использование AsyncOperation объекта для отслеживания времени существования асинхронных операций. Этот пример кода является частью более крупного примера, предоставленного System.ComponentModel.AsyncOperationManager для класса.

Полный список кода см. в разделе "Практическое руководство. Реализация компонента, поддерживающего асинхронную модель на основе событий". Полный список кода клиентской формы см. в разделе "Практическое руководство. Реализация клиента асинхронного шаблона на основе событий".

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

Комментарии

При реализации класса в соответствии с обзором асинхронных шаблонов на основе событий может потребоваться отслеживать время существования каждой асинхронной операции, вызываемой в экземпляре класса. Класс AsyncOperation предоставляет способы отслеживания и отчета о ходе асинхронной задачи.

В следующем списке описаны способы использования AsyncOperation объекта:

  • Чтобы сообщить о ходе выполнения и промежуточных результатах клиенту, вызовите Post из асинхронного рабочего кода.

  • Чтобы указать, что асинхронная задача завершена, или отменить ожидающую асинхронную задачу, вызовите PostOperationCompleted.

Класс должен получить объект для каждой AsyncOperation асинхронной задачи, вызывая AsyncOperationManager.CreateOperation при запуске каждой задачи. Чтобы разрешить клиенту различать отдельные асинхронные задачи, AsyncOperationManager.CreateOperation принимает параметр для уникального предоставленного клиентом маркера, который становится свойством UserSuppliedState . Затем его можно использовать клиентским кодом для определения конкретной асинхронной задачи, которая вызывает события хода выполнения или завершения.

Примечания для тех, кто наследует этот метод

Поставщики должны обеспечить PostOperationCompleted(SendOrPostCallback, Object) асинхронность и Post(SendOrPostCallback, Object) вызовы, чтобы поставщики библиотек классов не должны беспокоиться о потенциальных переполнениях стека, если они предполагают асинхронное поведение в определенной модели приложения, которая происходит синхронно.

Дополнительные сведения о реализации асинхронных классов см. в разделе "Реализация асинхронного шаблона на основе событий".

Свойства

SynchronizationContext

Возвращает объект SynchronizationContext, переданный в конструктор.

UserSuppliedState

Возвращает или задает объект, используемый для уникальной идентификации асинхронной операции.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

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

GetHashCode()

Служит хэш-функцией по умолчанию.

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

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

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

Создает неполную копию текущего объекта Object.

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

Завершает время существования асинхронной операции.

Post(SendOrPostCallback, Object)

Вызывает делегата для потока или контекста, соответствующего модели приложения.

PostOperationCompleted(SendOrPostCallback, Object)

Завершает время существования асинхронной операции.

ToString()

Возвращает строку, представляющую текущий объект.

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

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

См. также раздел