Поделиться через


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)

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

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