我正在尝试下载一个文件列表(使用响应式扩展),同时保持最多两个并行下载。
到目前为止,我没有遇到一个工作样本。
到目前为止最接近的是:
如何限制Parallel.ForEach?
但是我想通过Rx.net做同样的事情
Observable.Merge
接受一个maxConcurrent
参数,该参数允许您限制维护的并行订阅的数量。所以你可以这样做:
public class DownloadResult { /*...*/ }
public Task<DownloadResult> DownloadFileAsync(string path) { /*...*/ }
public IObservable<DownloadResult> DownloadFiles(int maxConcurrent, string[] paths)
{
return paths
.Select(path => Observable.FromAsync(() => DownloadFileAsync(path)))
.Merge(maxConcurrent: maxConcurrent);
}