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


AsyncOperationManager Класс

Определение

Обеспечивает управление параллелизмом для классов, поддерживающих вызовы асинхронных методов. Этот класс не наследуется.

public ref class AsyncOperationManager abstract sealed
public static class AsyncOperationManager
type AsyncOperationManager = class
Public Class AsyncOperationManager
Наследование
AsyncOperationManager

Примеры

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

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

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

Комментарии

Если классу необходимо обеспечить асинхронное поведение в соответствии с обзором асинхронной модели на основе событий, вы столкнетесь с рядом проблем с управлением параллелизмом. В частности, необходимо обеспечить вызов обработчиков событий в потоке или контексте, которые подходят для модели приложения (например, Windows Forms приложения, приложения ASP.NET, консольные приложения и т. д.). предоставляет AsyncOperationManager удобный способ создания класса, который правильно выполняется во всех моделях приложений, поддерживаемых платформа .NET Framework.

Класс AsyncOperationManager имеет один метод , CreateOperationкоторый возвращает System.ComponentModel.AsyncOperation , который может использоваться для отслеживания длительности конкретной асинхронной задачи. Для System.ComponentModel.AsyncOperation задачи можно использовать для оповещения клиентов о завершении задачи. Его также можно использовать для публикации обновлений хода выполнения и добавочных результатов без завершения операции.

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

Свойства

SynchronizationContext

Получает или задает контекст синхронизации для асинхронной операции.

Методы

CreateOperation(Object)

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

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

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