Condividi tramite


AsyncOperation.PostOperationCompleted(SendOrPostCallback, Object) Metodo

Definizione

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

d
SendOrPostCallback

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à.

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 ddi 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.

Si applica a

Vedi anche