2014-07-09 70 views
2

我试图下载一个文件列表(使用被动扩展),一次保持最多两个并行下载。Rx.NET - 一次下载两个文件

到目前为止,我没有遇到过工作示例。

最接近的事至今是:

How can I limit Parallel.ForEach?

但我想这样做是通过Rx.net 任何帮助将非常感激。

+0

你使用Rx,因为列表是动态的吗? – ziya

+0

不一定。它会列出n个网址或动作(同步方法,即下载活动) –

回答

3

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); 
} 
+0

感谢您的帮助。我用linqpad运行你的脚本,但它不会产生所需的结果。你可以请评论这个:http://pastebin.com/5WBQXQv5 –

+1

是你的'下载同步'不是真正的异步。从来没有'新'一个任务。改为使用'Task.Run'。或者声明你的方法'异步'并摆脱任务构造并使用'await Task.Delay(1000);'而不是'睡眠' – Brandon

+1

工作!感谢你的帮助 –

相关问题