2

我继承了 ac# 应用程序,该应用程序通过 Webclient downloadfileasync 从约 380 个站点采样数据。为每个站点创建一个单独的线程!(在下载下一个数据之前,每次下载都会等待一个超时时间 - 所以负载不是恒定的......但仍然!)无论如何,随着网站数量在未来一年左右(可能会急剧增加)增加,我想将其更改为几个(合理数量)的工作线程,它们为站点的子集发出一堆 Webclient 下载文件异步调用。但我不确定如果多个下载同时完成会发生什么 - downloadfilecompleted 事件处理程序是否会被 webclient 序列化?或者多个 webclient 完成是否可以“同时”发生(或者更有可能,交错)?我会冒一个完成破坏另一个完成的风险吗?或者是否有人对如何管理当前实现中的线程爆炸有更好的建议?

提前致谢。

4

1 回答 1

2

预计可能会同时引发多个完成事件 - 但除非有一些不小心处理的共享状态,否则应该没问题。结果不应该被“破坏”——如果他们这样做了,那绝对是 .NET 中的一个错误。

请注意,如果您使用异步调用,您可能不需要工作线程 - 做异步操作的全部意义在于您发出调用然后阻塞线程,因此可以从UI线程(或其他)。

如果您能够使用尖端技术,C# 5 / .NET 4.5(处于候选发布模式)中的 async/await 功能可以让您的生活更轻松。

于 2012-06-18T18:49:43.940 回答