异步问题

zhanglong_longlong 2015-12-17 10:09:28

List<string> list = new List<string>
{
"http://www.baidu.com"
"http://www.baidu.com"
"http://www.baidu.com"
};
var tasks = new Task[list.Count];
for (int i = 0; i < tasks.Length; i++)
{
tasks[i] = Task.Factory.StartNew(() =>
{
//这里执行WebRequest请求页面操作

});
}
Task.WaitAll(tasks);

问,这里3跳的话这样写应该没问题的,但是如果list有1千个Url地址的话应该怎么分配呢,分配多少合适,我这样写肯定不行,因为就会有1000个线程处理了。
...全文
129 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
masanaka 2015-12-17
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
实际上,Task 写起来很繁琐,特别是执行一些类似 sql 的查询时,使用PLinq 是比较简洁准确的。我以前写过一个 demo: http://bbs.csdn.net/topics/390420459
P哥V5~
  • 打赏
  • 举报
回复
实际上,Task 写起来很繁琐,特别是执行一些类似 sql 的查询时,使用PLinq 是比较简洁准确的。我以前写过一个 demo: http://bbs.csdn.net/topics/390420459
  • 打赏
  • 举报
回复
另外,尽管 c# 高版本有了一些所谓的“自动改进”,但是最好还是自己注意这样写
for (int i = 0; i < tasks.Length; i++)
{
    var j = i;
    ....[j]......
}
防止滥用变量 i。
  • 打赏
  • 举报
回复
Task 使用线程池,不是简单随便启动线程的。
zhanglong_longlong 2015-12-17
  • 打赏
  • 举报
回复
有人知道吗?
  • 打赏
  • 举报
回复
这么写基本没问题的,假如请求的是同一台服务器,你需要考虑的是服务端的压力,因为请求瞬时太密集,服务端可能会响应超时,就像12306那样 所以最好是分批进行
  • 打赏
  • 举报
回复
因为task最终用的也是ThreadPool,所以可以直接设置ThreadPool的相关值 http://www.bubuko.com/infodetail-1093650.html 但完全说基于ThreadPool又是不正确的,只能说默认是 http://www.uol123.com/2012/12/11/c%E7%BA%BF%E7%A8%8B%E4%B9%8Btask%E4%BB%BB%E5%8A%A1%E8%AF%A6%E8%A7%A3.html
zhanglong_longlong 2015-12-17
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
你可以试验下,我记得在哪里看过不是你startnew了1000个就创建了1000个的
那比如需要1000或者10000的话,这种怎么改呢?》
  • 打赏
  • 举报
回复
你可以试验下,我记得在哪里看过不是你startnew了1000个就创建了1000个的
zhanglong_longlong 2015-12-17
  • 打赏
  • 举报
回复
我这种想以我这种方式写,请问如何改写好?

62,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧