我继承了一个 C# 应用程序,该应用程序通过 Webclient downloadfileasync 从约 380 个站点采样数据。为每个站点创建一个单独的线程! (每次下载都会等待一段超时时间,然后再下载下一个数据 - 因此负载不是恒定的......但仍然如此!)无论如何,随着网站数量在未来一年左右的时间里将增加(可能会急剧增加),我想将其更改为一些(合理数量)工作线程,这些线程为站点的子集发出一堆 Webclient downloadfileasync 调用。但我不确定如果多个下载同时完成会发生什么 - downloadfilecompleted 事件处理程序是否会被 webclient 序列化?或者多个 Web 客户端完成是否可以“同时”发生(或更可能是交错发生)?我是否会面临一项完成任务破坏另一项完成任务的风险?或者有人对如何管理当前实现中的线程爆炸有更好的建议吗?
提前致谢。
最佳答案
我预计可能会同时引发多个完成事件 - 但除非您有一些您没有仔细处理的共享状态,否则应该没问题。结果不应该“损坏” - 如果损坏,那肯定是 .NET 中的一个错误。
请注意,如果您使用异步调用,您可能不需要工作线程 - 异步执行操作的全部要点是您发出调用,然后不阻止线程,因此可以从 UI 线程(或其他线程)执行此操作。
如果您能够使用前沿技术,C# 5/.NET 4.5(处于候选 Release模式)中的异步/等待功能可以让您的生活变得更加轻松。
关于时间:2019-03-17 标签:c#asyncwebclient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089095/