AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Завершает время существования асинхронной операции.
public:
void PostOperationCompleted(System::Threading::SendOrPostCallback ^ d, System::Object ^ arg);
public void PostOperationCompleted (System.Threading.SendOrPostCallback d, object arg);
public void PostOperationCompleted (System.Threading.SendOrPostCallback d, object? arg);
member this.PostOperationCompleted : System.Threading.SendOrPostCallback * obj -> unit
Public Sub PostOperationCompleted (d As SendOrPostCallback, arg As Object)
Параметры
Объект SendOrPostCallback, создающий оболочку делегата, который должен вызываться при завершении операции.
- arg
- Object
Аргумент для делегата, содержащегося в параметре d
.
Исключения
Метод OperationCompleted() ранее уже вызывался для этой задачи.
d
имеет значение null
.
Примеры
В следующем примере кода демонстрируется использование PostOperationCompleted метода для завершения времени существования асинхронной операции. Этот пример входит в состав более крупного примера использования класса System.ComponentModel.AsyncOperationManager.
// This method cancels a pending asynchronous operation.
public void CancelAsync(object taskId)
{
AsyncOperation asyncOp = userStateToLifetime[taskId] as AsyncOperation;
if (asyncOp != null)
{
lock (userStateToLifetime.SyncRoot)
{
userStateToLifetime.Remove(taskId);
}
}
}
' This method cancels a pending asynchronous operation.
Public Sub CancelAsync(ByVal taskId As Object)
Dim obj As Object = userStateToLifetime(taskId)
If (obj IsNot Nothing) Then
SyncLock userStateToLifetime.SyncRoot
userStateToLifetime.Remove(taskId)
End SyncLock
End If
End Sub
Комментарии
Вызовите метод , PostOperationCompleted чтобы завершить время существования асинхронной операции. После вызова этого метода для конкретной задачи вызовы соответствующего AsyncOperation объекта вызовут исключение.
Параметр d
заключает в оболочку делегат, который будет вызываться классом, когда заканчивается время существования задачи из-за завершения, отмены или сбоя задачи. Объект AsyncOperation гарантирует, что делегат вызывается в потоке или контексте, соответствующем модели приложения. При необходимости делегат может вызвать событие, уведомляющее клиентов о том, что время существования асинхронной задачи завершено.
Параметр arg
используется для передачи сведений о состоянии делегату d
завершения . В качестве значения параметра можно использовать AsyncOperation объект или System.ComponentModel.AsyncCompletedEventArgs объект . Кроме того, если требуется предоставить дополнительное хранилище состояний, можно использовать экземпляр класса, наследуемого от System.ComponentModel.AsyncCompletedEventArgs класса .
Примечания для тех, кто наследует этот метод
Наследники должны сделать PostOperationCompleted(SendOrPostCallback, Object) вызов асинхронным, чтобы поставщикам библиотек классов не нужно было беспокоиться о потенциальных переполнениях стека, если они предполагают асинхронность, но конкретная модель приложения будет синхронной. Метод следует интерпретировать как вызов "завершения времени существования", то есть реализация должна выполнять то, что подходит для модели приложения. Например, ASP.NET уменьшает количество невыполненных асинхронных операций. Это также должно привести операцию в состояние, в результате которого все последующие вызовы в нее завершатся сбоем, так как она завершена.
Дополнительные сведения о реализации асинхронных классов см. в статье Реализация асинхронного шаблона на основе событий.