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)
{
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 会减少其未完成异步操作的计数。 这还应将操作置于一种状态,以便对它的任何后续调用都将失败,因为它现已完成。
有关实现异步类的详细信息,请参阅 实现基于事件的异步模式。