Задержка цикла while, выполняющего HttpRequest в c # - PullRequest
1 голос
/ 19 февраля 2012

Я провожу некоторое тестирование HTTP-заголовка, чтобы проверить, жив ли URL или нет. Я делаю это со случайно сгенерированными строковыми URL-адресами, проходящими через цикл while, который вызывает функцию HttpRequest. Проблема в том, что, пока HttpWebRequest является Async, цикл while продолжает работать, принимая множество процессов, одновременно проверяя множество ссылок. Поэтому я хотел бы задержать цикл while на несколько секунд / миллисекунд или просто подождать, пока HttpWebRequest обработает только 3 запроса за раз. Я просто потерян здесь, и я не знаю, как это сделать.

Мой цикл while выглядит следующим образом

 String Episode = textBox1.Text;
            String Rand = newInt(16);
            String Url = "http://someurl.com?_" + Episode + "paradisehotel_" + Rand + ".wmv";

            while (checkUrl(Url) == false)
            {
                Rand = newInt(16);
                while (isInList(Rand, list))
                {
                    Rand = newInt(16);
                }

                list.Add(Rand);

                Url = "someurl.com_" + Episode + "paradisehotel_" + Rand + ".wmv";
            }

Моя функция CheckUrl выглядит следующим образом

private bool checkUrl(String url)
{

    HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@url);
    req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
    try
    {
        WebResponse response = req.GetResponse();
        return true;
    }
    catch (WebException ex)
    {
        Console.WriteLine(ex.Message);
        return false;
    }

}

Надеюсь, у кого-то, кто умнее меня, есть решение. В основном спасибо Jonas

1 Ответ

1 голос
/ 19 февраля 2012

Возьмите пример здесь (слишком много кода, чтобы скопировать и вставить все это здесь), который использует асинхронный обратный вызов и увеличивает статический счетчик внутри обратного вызова после загрузки ответа.Затем все, что вам нужно сделать, это проверить, что значение счетчика не превышает максимального значения в каждой итерации цикла while до выполнения следующего запроса с помощью thread.sleep.

...