代码在进程中间停止工作,没有错误
Code stops working in the middle of process with no errors
我有一个功能:
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,它将停止工作。
您没有处理您的响应,因此您永远不会将连接返回到连接池 - 如果您从同一主机获取多个图像,连接池会阻止您打开更多连接到该主机,等待返回现有的主机。只需确保处理响应:
using (var response = (HttpWebResponse) request.GetResponse())
{
return response.StatusCode == HttpStatusCode.OK;
}
尽管我不得不说,为每个图像发出两个请求似乎毫无意义——一个只是检查它是否存在,另一个是获取实际数据。我会尝试下载每个文件,并处理由于文件不存在而导致下载失败的情况。
我有一个功能:
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,它将停止工作。
您没有处理您的响应,因此您永远不会将连接返回到连接池 - 如果您从同一主机获取多个图像,连接池会阻止您打开更多连接到该主机,等待返回现有的主机。只需确保处理响应:
using (var response = (HttpWebResponse) request.GetResponse())
{
return response.StatusCode == HttpStatusCode.OK;
}
尽管我不得不说,为每个图像发出两个请求似乎毫无意义——一个只是检查它是否存在,另一个是获取实际数据。我会尝试下载每个文件,并处理由于文件不存在而导致下载失败的情况。