通过


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() 以前已为此任务调用。

dnull

示例

下面的代码示例演示如何使用 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。 可以使用对象 AsyncOperationSystem.ComponentModel.AsyncCompletedEventArgs 对象作为参数值。 或者,如果要提供其他状态存储,可以使用派生自该类的 System.ComponentModel.AsyncCompletedEventArgs 类的实例。

继承者说明

继承器必须使 PostOperationCompleted(SendOrPostCallback, Object) 调用异步,因此,如果类库提供程序假设异步,但特定应用程序模型恰好是同步的,则不需要关注潜在的堆栈溢出。 该方法应解释为“结束生存期”调用,这意味着实现需要执行适合应用程序模型的内容。 例如,ASP.NET 会递减其未完成的异步操作计数。 这还应将操作置于一个状态,使对它的任何后续调用都将失败,因为它现已完成。

有关实现异步类的详细信息,请参阅 实现基于事件的异步模式

适用于

另请参阅