Я использую класс WebClient и мою собственную тонкую оболочку вокруг него для запроса JSON через HTML - я нахожусь на приемной стороне архитектуры, подобной Comet, и поэтому клиент должен постоянно поддерживать ожидающий запрос,так что сервер может нажать на клиента по желанию.
Я пытаюсь подтвердить, будет ли следующий код правильным и безопасным способом сделать это:
subscriber = new Action(() =>
{
// This function wraps the WebClient 'DownloadStringAsync' method
client.BeginDownload(this.Path, new AsyncCallback(x =>
{
var data = (x.AsyncState as Func<JsonResponse>).EndInvoke(x);
if (data != null)
{
OnReceive(data, new Uri(this.FullUri));
}
subscriber(); // Received data so re-submit request
}), this.QueryArgs);
while (client.IsBusy)// As long as busy, no need to re-submit a request
{
}
subscriber();
});
subscriber();
Из моего собственного анализа мне кажется, что вышеприведенное будет гарантировать, чтоклиент всегда повторно отправляет запрос, либо когда a) он получает ответ, либо b) он истекает.Будет ли это приемлемым способом для достижения этого или есть гораздо лучшая практика, которую я упускаю?Такое использование цикла while кажется мне нестандартным, однако я не могу придумать какой-либо другой способ создания цикла ожидания.
Я также хочу убедиться, что при этой настройке я не пропускаю никаких ресурсов, так как он может или не может гарантировать, что EndInvoke () вызывается каждый раз?