【发布时间】:2014-08-12 20:21:33
【问题描述】:
假设一个应用程序一次并行请求 100 个 url 以获取 10000 个 url,我将收到以下错误,其中 50-5000 个:
无法解析远程名称'www.url.com'
我了解该错误意味着 DNS 服务器无法解析 url。但是,对于每次运行,无法解析的 url 数量会发生变化(范围从 50 到 5000)。
我是否太快提出太多请求?我什至可以这样做吗? - 在功能更强大的服务器上运行相同的测试,显示只有 10 个 url 无法解析 - 这听起来更真实。
执行并行请求的代码:
var semp = new SemaphoreSlim(100);
var uris = File.ReadAllLines(@"C:\urls.txt").Select(x => new Uri(x));
foreach(var uri in uris)
{
Task.Run(async () =>
{
await semp.WaitAsync();
var result = await Web.TryGetPage(uri); // Using HttpWebRequest
semp.Release();
});
}
【问题讨论】:
-
你能展示最基本的并行工作的代码吗?
-
@DavidHaney,完成 :-)
-
看起来您可能只是因为并发请求而使 DNS 服务器超载,或者类似地,您的
Web实例/类是静态的(或具有静态成员)并且所有任务都在共享连接,这将有奇怪的结果。 -
此外,当您说在功能更强大的 Web 服务器上运行它更有效时,我敢打赌它使用的 DNS 与您的机器不同。
标签: c# windows multithreading dns