AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Pone fine alla durata di un'operazione asincrona.
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)
Parametri
Oggetto SendOrPostCallback che esegue il wrapping del delegato da chiamare al completamento dell'operazione.
- arg
- Object
Argomento per il delegato contenuto nel parametro d
.
Eccezioni
Il metodo OperationCompleted() è già stato chiamato per l'attività.
d
è null
.
Esempio
Nell'esempio di codice seguente viene illustrato l'utilizzo del PostOperationCompleted metodo per terminare la durata di un'operazione asincrona. Questo esempio di codice fa parte di un esempio più ampio fornito per la System.ComponentModel.AsyncOperationManager classe .
// 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
Commenti
Chiamare il PostOperationCompleted metodo per terminare la durata di un'operazione asincrona. Dopo che questo metodo viene chiamato per una determinata attività, le chiamate al relativo oggetto corrispondente AsyncOperation genereranno un'eccezione.
Il d
parametro esegue il wrapping del delegato che si vuole chiamare alla fine della durata dell'attività a causa del completamento, dell'annullamento o dell'errore dell'attività. L'oggetto AsyncOperation garantisce che il delegato venga richiamato nel thread o nel contesto appropriato per il modello di applicazione. Il delegato può facoltativamente generare un evento che notifica ai client che la durata dell'attività asincrona è terminata.
Il arg
parametro viene usato per passare le informazioni sullo stato al delegato d
di completamento . È possibile usare un AsyncOperation oggetto o un System.ComponentModel.AsyncCompletedEventArgs oggetto come valore del parametro. In alternativa, se si vuole fornire ulteriore spazio di archiviazione dello stato, è possibile usare un'istanza di una classe derivata dalla System.ComponentModel.AsyncCompletedEventArgs classe .
Note per gli eredi
Gli eredi devono rendere asincrona la PostOperationCompleted(SendOrPostCallback, Object) chiamata, in modo che i provider di librerie di classi non debbano preoccuparsi di potenziali overflow dello stack se presuppongono asincrona, ma un particolare modello di applicazione è sincrono. Il metodo deve essere interpretato come una chiamata di "fine della durata", ovvero l'implementazione deve eseguire le operazioni appropriate per il modello di applicazione. Ad esempio, ASP.NET decrementerà il numero di operazioni asincrone in sospeso. L'operazione dovrebbe anche entrare in uno stato in modo che tutte le chiamate successive in esso non riescano, poiché è stata completata.
Per altre informazioni sull'implementazione di classi asincrone, vedere Implementazione del modello asincrono basato su eventi.