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


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

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

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

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