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 для контроля длительности конкретной асинхронной операции. |