如何从文件存储中异步下载数百万个文件



假设我有一个管理数百万文档的数据库,这些文档存储在WebDav或SMB服务器上,不支持批量检索文档。给定一个(可能是所有(文档ID的列表,我如何尽快下载相应的文档?

遍历列表并按顺序下载它们太慢了。我看到的两个选项是线程和异步下载。

我的直觉是异步编程应该优先于线程,因为我只是在客户端等待IO。但我对异步编程还很陌生,不知道该怎么做。我认为,对整个列表进行迭代并发送异步下载请求可能会在很短的时间内导致太多请求,从而导致请求被拒绝。那么我该如何节流呢?有最佳实践方法吗?

看看这个:如何限制并发异步I/O的数量?正如公认答案中所建议的那样,使用SemaphoreSlim是一个简单且非常好的解决方案。

不过,我个人最喜欢的是TPL数据流库。您可以在这里看到一个使用此库从web异步下载页面的示例,该库具有可配置的并发级别,并与HttpClient类相结合。这里是另一个例子。

我还发现这篇很棒的文章解释了限制并发下载数量的4种不同方法。

最新更新