Соотнести завершенное событие с исходным WebClient? - PullRequest
1 голос
/ 17 ноября 2009

У меня есть WebClient, который запускается несколько раз в одном классе и работает асинхронно. Мне нужен способ соотнести запрос с ответом. Есть ли способ, например, получить оригинальный URI в обработчике завершенных событий? Или любым другим способом?

Я использую это в серебряном свете, если вам интересно.

Спасибо, Palantir

Ответы [ 2 ]

2 голосов
/ 17 ноября 2009

Во-первых, вы не можете иметь несколько невыполненных асинхронных операций на одном и том же экземпляре WebClient. Поэтому на данный момент я предполагаю, что вы создаете несколько экземпляров WebClient и просто назначаете одну и ту же функцию событиям в этих экземплярах WebClient.

Следовательно, можно упростить корреляцию экземпляра WebClient, использованного для генерации запроса, приведя параметр sender события обратно к WebClient.

Кроме того, все методы Async (в WebClient или в базовых типах WebRequest, WebResponse) имеют перегрузку, которая принимает object userToken. Этот userToken передается в любом последующем событии, которое возникает в результате вызова. Вы можете передать любой понравившийся объект в параметре. Следовательно, если у вас есть какой-то другой экземпляр объекта или какое-либо значение идентификатора, которое вы хотели бы использовать для сопутствующей связи, то вызовите этот параметр.

 WebClient wc = new WebClient();
 wc.DownloadStringCompleted += Handle_DownloadStringCompleted;
 wc.DownloadString(myUri, myUri);

...

 void Handle_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
 {
    if (!e.Canceled)
    {
        Uri originalUri = (Uri)e.UserState;
        // Do stuff with the Uri.
    }
 }
0 голосов
/ 17 ноября 2009

Это компромисс производительности, но вы можете использовать разные экземпляры класса WebClient, и в этом случае вы соотнесете ответ с исходным экземпляром WebClient, который запустил запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...