c# - Task.Run 不执行所有的 httpwebrequest 方法
问题描述
我有一个发送大量 httpwebrequests 并读取数据的应用程序。所以我决定在不同的任务上运行每个请求。我最终有大约 60 个任务要运行。问题是当我使用task.run时这些请求没有得到执行。事实上,一些请求被发送到服务器并用数据返回响应,其中很多只是被忽略了。我想知道这是否是因为 CPU 限制,如果是这样,如何处理此类请求。
请求数据的方法示例:
private static bool getResponseData(string url, string pageNumber)
{
url = url + "page=" + pageNumber;
Uri myUri = new Uri(url, UriKind.Absolute);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myUri);
request.AutomaticDecompression = DecompressionMethods.GZip;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (String.IsNullOrWhiteSpace(response.CharacterSet))
readStream = new StreamReader(receiveStream);
else
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
string data = readStream.ReadToEnd();
//dealing with data by storing it in the data base
return true;
}
return false;
}
}
}
一种循环遍历 url 页面的方法
private void startrequest(string url)
{
bool data2 = getResponseData(url, "0");
int counter2 = 0;
while (data2 && counter2 < 4)
{
counter2++;
data2 = getResponseData(url, counter2.ToString());
}
}
在我的应用中使用task.run的例子如下:
Task task1 = Task.Run(() => startrequest("www.x1.com"));
Task task2 = Task.Run(() => startrequest("www.x2.com"));
Task task3 = Task.Run(() => startrequest("www.x3.com"));
Task task4 = Task.Run(() => startrequest("www.x4.com"));
Task.WaitAll(task1, task2, task3, task4);
如果我在不使用 Task.Run 的情况下手动运行 startrequest 方法,我总是会得到正确的数据。我在 I5 上运行我的电脑。
解决方案
推荐阅读
- mysql - MySQL子查询拉取满足多列数据点的结果
- c++ - 找不到包含文件“字符串”
- swift - 我可以在 xcode 上使用自定义 Swiftlint 安装路径吗?
- c# - 如何将类添加到组合框并应用于图片框?
- spring - Spring - 无法将 Pageable 设置为小于总结果大小
- python - 创建了太多临时目录
- postgresql - 如何将数据从一个表复制到另一个表,执行模式更改并使它们保持同步,直到在 Postgres 中被切断?
- algorithm - 求解整数分区的算法
- python - 检查列表中拼写错误的单词
- javascript - 我在使用 React Typescript 编译时遇到问题