【发布时间】:2012-11-17 02:15:23
【问题描述】:
我正在开发一个基于 .NET4 的应用程序,它必须请求第三方服务器才能从它们那里获取信息。我正在使用 HttpClient 发出这些 HTTP 请求。
我必须在短时间内创建一百或一千个请求。我想将这些请求的创建限制在一个限制(由常量或其他东西定义),这样其他服务器就不会收到很多请求。
我检查了this link,它显示了如何减少随时创建的任务数量。
这是我的非工作方法:
// 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();
当然,这里的问题是即使当时创建了一个任务,也会同时创建和处理大量请求,因为它们运行在另一个调度程序中。我找不到将调度程序更改为 HttpClient 的方法。
我应该如何处理这种情况?我想将创建的请求数量限制在一定限度内,但不要阻止等待这些请求完成。
这可能吗?有什么想法吗?
【问题讨论】:
-
您如何调用您发布的代码?您是否有在
foreach循环中使用的 URL 集合或类似的东西? -
没错,我有一个 URL 集合,我将它们转换成一个任务集合。每个映射都是使用上面发布的代码执行的。
标签: .net async-ctp throttling dotnet-httpclient