Поделиться через


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)

Параметры

d
SendOrPostCallback

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

Дополнительные сведения о реализации асинхронных классов см. в разделе "Реализация асинхронного шаблона на основе событий".

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

См. также раздел