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 會減少其未完成的非同步操作數量。 這也應該會讓操作進入一個狀態,使得後續任何呼叫都會失敗,因為操作已經完成。
欲了解更多關於實作非同步類別的資訊,請參閱 「實作基於事件的非同步模式」。