AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
结束异步操作的生存期。
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。 可以使用对象 AsyncOperation 或 System.ComponentModel.AsyncCompletedEventArgs 对象作为参数值。 或者,如果要提供其他状态存储,可以使用派生自该类的 System.ComponentModel.AsyncCompletedEventArgs 类的实例。
继承者说明
继承器必须使 PostOperationCompleted(SendOrPostCallback, Object) 调用异步,因此,如果类库提供程序假设异步,但特定应用程序模型恰好是同步的,则不需要关注潜在的堆栈溢出。 该方法应解释为“结束生存期”调用,这意味着实现需要执行适合应用程序模型的内容。 例如,ASP.NET 会递减其未完成的异步操作计数。 这还应将操作置于一个状态,使对它的任何后续调用都将失败,因为它现已完成。
有关实现异步类的详细信息,请参阅 实现基于事件的异步模式。