¿Cuál es la mejor manera de cancelar una solicitud asincrónica de WCF?

(Suponiendo un método WCF llamado "MyFunction")

Actualmente, para admitir la cancelación de una solicitud de WCF, estoy usando los métodos BeginMyFunction / EndMyFunction generados por svcutil (y manejo un indicador isCanceled al enviar los resultados al hilo principal). Me gustaría usar el método MyFunctionAsync (y conectarme al evento MyFunctionAsyncCompleted en su lugar) para llamadas asíncronas en lugar de Begin / End.

¿Cuál es la forma mejor / compatible de manejar la cancelación de solicitudes WCF si se usa MyFunctionAsyncCompleted, y aún así asegurar que el evento no se active en una página que ya no se carga (es decir, navegación de página dentro de un marco)?

¡Gracias!

EDITAR:

Decidí que quiero crear mi objeto WcfClient por llamada (en lugar de por página WPF o por aplicación), así que esto es lo que se me ocurrió:

public void StartValidation(){
    WcfClient wcf = new WcfClient();
    wcf.IsValidCompleted += new EventHandler<IsValidCompletedEventArgs>(wcf_IsValidCompleted);
    //pass the WcfClient object as the userState parameter so it can be closed later
    wcf.IsValidAsync(TextBox.Text, wcf);  
}

void wcf_IsValidCompleted(object sender, IsValidCompletedEventArgs e) {
    if(!m_IsCanceled){
        //Update the UI
        //m_IsCanceled is set to true when the page unload event is fired
    }
    //Close the connection
    if (e.UserState is WcfClient) {
        ((WcfClient)e.UserState).Close();
    }
}

Me resulta difícil descubrir cuál es la forma recomendada de lograr lo que acabo de implementar. ¿Está bien tal cual o hay problemas / casos extremos de los que debo preocuparme? ¿Cuál es el estándar de oro cuando se trata de cancelar correctamente una llamada WCF?

Respuestas a la pregunta(5)

Su respuesta a la pregunta