Код перестает работать в середине процесса без ошибок

У меня есть функция:

public bool urlExists(string url)
        {
            try
            {
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

                request.Method = "HEAD";

                HttpWebResponse response = request.GetResponse() as HttpWebResponse;

                return (response.StatusCode == HttpStatusCode.OK);
            }
            catch (Exception ex)
            {
                Console.WriteLine("false");
                return false;
            }
        }

Который проверяет, существует ли URL или нет. И у меня есть еще одна функция для загрузки файлов.

    public void downloadImages(string imgCode)
        {
    using (WebClient wc = new WebClient())
                {
                    try
                    {
                        if (urlExists("mydomain.com/images/" + imgCode + "/large.png"))
                        {
=                            wc.DownloadFile("mydomain.com/images/" + imgCode + "/large.png", "filepath" + imgCode + ".png");
                        }
                        if (urlExists("mydomain.com/images/" + imgCode + "/large.jpg"))
                        {
                            wc.DownloadFile("mydomain.com/images/" + imgCode + "/large.jpg", "filepath" + imgCode + ".jpg");
                        }
                        System.Threading.Thread.Sleep(1000);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
           }

У меня есть список 'imgCodes', и я вызываю функцию следующим образом:

for (int i = 0; i < imgCodes.Count; i++)
            {
                downloadImages(imgCodes[i]);
            }

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

Например, если он загружает PNG, а следующее изображение является JPG, он перестает работать и существует поток. Или, если он загружает jpb и следующее изображение png, он перестает работать.

1 ответ

Решение

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

using (var response = (HttpWebResponse) request.GetResponse())
{
    return response.StatusCode == HttpStatusCode.OK;
}

Хотя я должен сказать, что бессмысленно делать два запроса на изображение - один просто для проверки того, существует ли он, а другой для получения реальных данных. Я просто попытался бы загрузить каждый файл и обработать случай, когда загрузка не удалась из-за того, что он не существует.

Другие вопросы по тегам