Каков наилучший способ отменить асинхронный запрос WCF?

(Предполагая, что метод WCF называется MyFunction)

В настоящее время для поддержки отмены запроса WCF я использую методы BeginMyFunction / EndMyFunction, сгенерированные svcutil (и обрабатываю флаг isCanceled при отправке результатов в основной поток). Я хотел бы использовать метод MyFunctionAsync (и вместо этого подключиться к событию MyFunctionAsyncCompleted) для асинхронных вызовов вместо Begin / End.

Каков наилучший / поддерживаемый способ обработки отмены запросов WCF, если используется MyFunctionAsyncCompleted, и при этом гарантируется, что событие не будет запущено на странице, которая больше не загружается (то есть навигация по страницам внутри фрейма).

Спасибо!

РЕДАКТИРОВАТЬ:

Я решил, что хочу создать свой объект WcfClient для каждого вызова (в отличие от каждого WPF-страницы или отдельного приложения), поэтому вот что я придумала:

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();
    }
}

Мне трудно понять, каков рекомендуемый способ выполнить то, что я только что реализовал. Это нормально, как есть, или есть ли подводные камни / крайние случаи, о которых мне нужно беспокоиться? Что является золотым стандартом в том, что касается правильной отмены вызова WCF?

Ответы на вопрос(5)

Ваш ответ на вопрос