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)
{
if (userStateToLifetime[taskId] is AsyncOperation)
{
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завершения. Объект или System.ComponentModel.AsyncCompletedEventArgs объект можно использовать AsyncOperation в качестве значения параметра. Кроме того, если требуется предоставить дополнительное хранилище состояний, можно использовать экземпляр класса, наследуемого System.ComponentModel.AsyncCompletedEventArgs от класса.
Примечания для тех, кто наследует этот метод
Наследутели должны сделать PostOperationCompleted(SendOrPostCallback, Object) вызов асинхронным, чтобы поставщики библиотек классов не должны беспокоиться о потенциальных переполнениях стека, если предполагается асинхронность, но конкретная модель приложения может быть синхронной. Метод должен интерпретироваться как вызов "окончания времени существования", то есть реализация должна выполнять то, что подходит для модели приложения. Например, ASP.NET будет уменьшать количество невыполненных асинхронных операций. Это также должно поместить операцию в состояние, таким образом, что все последующие вызовы в нее завершаются сбоем, так как она завершена.
Дополнительные сведения о реализации асинхронных классов см. в разделе "Реализация асинхронного шаблона на основе событий".