AsyncOperationManager AsyncOperationManager AsyncOperationManager AsyncOperationManager Class

Определение

Обеспечивает управление параллельным выполнением для классов, поддерживающих асинхронные вызовы метода.Provides concurrency management for classes that support asynchronous method calls. Этот класс не наследуется.This class cannot be inherited.

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

Примеры

В следующем примере кода показано использование AsyncOperationManager класса для создания класса, поддерживающего асинхронные операции для любой модели приложения.The following code example demonstrates using the AsyncOperationManager class to create a class that supports asynchronous operations for any application model. В нем показано, как реализовать класс, который проверяет число, чтобы определить, является ли он простым.It shows how to implement a class that tests a number to determine whether it is prime. Это вычисление может занять много времени, поэтому оно выполняется в отдельном потоке.This calculation can be time consuming, so it is done on a separate thread. Отчеты о ходе выполнения, добавочные результаты и уведомления о завершении AsyncOperation обрабатываются классом, который гарантирует, что обработчики событий клиента вызываются в правильном потоке или контексте.Progress reports, incremental results, and completion notifications are handled by the AsyncOperation class, which ensures that the client's event handlers are called on the proper thread or context.

Полный листинг кода см. в разделе как Реализация компонента, поддерживающего асинхронную модель на основе событий.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

Комментарии

Если класс должен обеспечить асинхронное поведение в соответствии с общими сведениями об асинхронной модели на основе событий, будет возникать ряд проблем с управлением параллелизмом.If your class needs to provide asynchronous behavior according to the Event-based Asynchronous Pattern Overview, you will encounter a number of concurrency management issues. Помимо этого, необходимо обеспечить вызов обработчиков событий в потоке или контексте, подходящем для модели приложения (например, Windows Forms приложений, ASP.NETASP.NET приложений, консольных приложений и т. д.).Among these is the requirement to ensure that event handlers are called on a thread or context that is appropriate for the application model (for example, Windows Forms applications, ASP.NETASP.NET applications, console applications, and so on). Предоставляет удобный способ создания класса, который работает должным образом во всех моделях приложений, .NET Framework.NET Frameworkподдерживаемых. AsyncOperationManagerThe AsyncOperationManager provides a convenient way to create a class that runs properly under all application models supported by the .NET Framework.NET Framework.

Класс содержит один CreateOperationметод, который возвращает System.ComponentModel.AsyncOperation , который может использоваться для наблюдения за длительностью конкретной асинхронной задачи. AsyncOperationManagerThe AsyncOperationManager class has one method, CreateOperation, which returns an System.ComponentModel.AsyncOperation that can be used to track the duration of a particular asynchronous task. System.ComponentModel.AsyncOperation Для задачи можно использовать для оповещения клиентов о завершении задачи.The System.ComponentModel.AsyncOperation for a task can be used to alert clients when a task completes. Он также может использоваться для отправки обновлений хода выполнения и добавочных результатов без завершения операции.It can also be used to post progress updates and incremental results without terminating the operation.

Дополнительные сведения о реализации асинхронных классов см. в разделе Реализация асинхронной модели на основе событий.For more information about implementing asynchronous classes, see Implementing the Event-based Asynchronous Pattern.

Свойства

SynchronizationContext SynchronizationContext SynchronizationContext SynchronizationContext

Получает или задает контекст синхронизации для асинхронной операции.Gets or sets the synchronization context for the asynchronous operation.

Методы

CreateOperation(Object) CreateOperation(Object) CreateOperation(Object) CreateOperation(Object)

Возвращает объект AsyncOperation для контроля длительности конкретной асинхронной операции.Returns an AsyncOperation for tracking the duration of a particular asynchronous operation.

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

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