我继承了一个c#应用程序,它通过Webclient downloadfileasync对来自〜380个站点的数据进行采样。为每个站点创建一个单独的线程! (在下载下一个数据之前,下载每个等待一个超时时间 - 所以负载不是恒定的......但仍然!)无论如何,随着网站数量的增加(可能是显着的)在未来一年左右,我想将此更改为一些(合理数量)的工作线程,这些工作线程为一部分站点发出一堆Webclient downloadfileasync调用。但我不确定如果多个下载同时完成会发生什么 - 下载文件完成的事件处理程序是否会被webclient序列化?或者可以“同时”(或更可能是交错)发生多个webclient完成?我是否会冒一次完成腐败另一次的风险?或者有没有人对如何管理当前实现中的线程爆炸有更好的建议?
提前致谢。
答案 0 :(得分:2)
我希望期望多个完成事件可能同时被引发 - 但除非你有一些你没有仔细处理的共享状态,否则应该没问题。结果不应该“被破坏” - 如果他们这样做,那肯定是.NET中的一个错误。
请注意,如果您正在使用异步调用,则可能不需要工作线程 - 执行异步操作的重点是您发出调用,然后不阻止线程,所以从UI线程(或其他)做到这一点很好。
如果您能够使用尖端技术,C#5 / .NET 4.5中的异步/等待功能(处于候选发布模式)可以让您的生活更轻松。