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

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

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

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