Mau*_*cio 6 .net throttling async-ctp dotnet-httpclient
我正在开发一个基于.NET4的应用程序,它必须请求第三方服务器才能从中获取信息.我正在使用HttpClient来发出这些HTTP请求.
我必须在短时间内创建一百或一千个请求.我想将这些请求的创建限制为一个限制(由常量或其他东西定义),以便其他服务器不会收到大量请求.
我已经检查了这个链接,它显示了如何减少随时创建的任务量.
这是我的非工作方法:
// create the factory
var factory = new TaskFactory(new LimitedConcurrencyLevelTaskScheduler(level));
// use the factory to create a new task that will create the request to the third-party server
var task = factory.StartNew(() => {
return new HttpClient().GetAsync(url);
}).Unwrap();
Run Code Online (Sandbox Code Playgroud)
当然,这里的问题是即使创建了当时的一个任务,也会同时创建和处理大量请求,因为它们在另一个调度程序中运行.我找不到将调度程序更改为HttpClient的方法.
我该如何处理这种情况?我想将创建的请求数量限制为某个限制,但不要阻止等待这些请求完成.
这可能吗?有任何想法吗?
首先,您应该考虑根据网站对工作负载进行分区,或者至少公开一个抽象,让您选择如何对 URL 列表进行分区。例如,一种策略可以是二级域名,例如 yahoo.com、google.com。
另一件事是,如果您正在进行认真的爬行,您可能需要考虑在云上进行。这样云中的每个节点都可以抓取不同的分区。当你说“很短的时间”时,你就已经为失败做好了准备。你需要关于你想要达到的目标的确切数字。
良好分区的另一个主要好处是,您还可以避免在高峰时段访问服务器,并避免在路由器级别面临 IP 禁止的风险,以防站点不简单地限制您。
| 归档时间: |
|
| 查看次数: |
1252 次 |
| 最近记录: |