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",
nameof(taskId));
}
userStateToLifetime[taskId] = asyncOp;
}
// Start the asynchronous operation.
WorkerEventHandler workerDelegate = new(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 для отслеживания длительности конкретной асинхронной операции. |