0

可能重复:
如何限制并发异步 I/O 操作的数量?

假设我有一个字符串数组

string[] domains = { "domain1.com", "domain2.com" ,..., "domain100.com"};

我想编写一个使用 5 个线程向这些域发送请求并将响应标头按启动顺序保存到同一日志文件的应用程序。例如:

Thread 1
domain1.com
Response header


Thread 2
domain2.com
Response header


Thread 3
domain3.com
Response header

Thread 4
domain4.com
Response header


Thread 5
domain5.com
Response header


Thread 1
domain6.com
Response header

Thread 2
domain7.com
Response header

我是多线程编程的新手,所以希望你能帮助我。非常感谢

4

2 回答 2

2

您不需要关心在后台创建了多少线程,线程池会为您优化线程创建,您的代码可能如下所示:

string[] domains = { "domain1.com", "domain2.com",...., "domain100.com" };

var client = new HttpClient();
var tasks = domains.Select(domain => client.GetAsync(domain)
                               .ContinueWith(task =>
                               {
                                   HttpResponseMessage response = task.Result;
                                   var headers = response.Headers;
                                   //Write to log file
                               }));

await Task.WhenAll(tasks);
于 2012-10-28T09:39:53.227 回答
1

我会使用 RX 扩展。

Paul Betts 对 RX 扩展有一个很好的概述,他在今年早些时候的 NDC 会议上解决了你的问题。

视频可在NDC 网站上找到

于 2012-10-28T09:23:46.047 回答