我试图下载一个文件列表(使用被动扩展),一次保持最多两个并行下载。Rx.NET - 一次下载两个文件
到目前为止,我没有遇到过工作示例。
最接近的事至今是:
How can I limit Parallel.ForEach?
但我想这样做是通过Rx.net 任何帮助将非常感激。
我试图下载一个文件列表(使用被动扩展),一次保持最多两个并行下载。Rx.NET - 一次下载两个文件
到目前为止,我没有遇到过工作示例。
最接近的事至今是:
How can I limit 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);
}
感谢您的帮助。我用linqpad运行你的脚本,但它不会产生所需的结果。你可以请评论这个:http://pastebin.com/5WBQXQv5 –
是你的'下载同步'不是真正的异步。从来没有'新'一个任务。改为使用'Task.Run'。或者声明你的方法'异步'并摆脱任务构造并使用'await Task.Delay(1000);'而不是'睡眠' – Brandon
工作!感谢你的帮助 –
你使用Rx,因为列表是动态的吗? – ziya
不一定。它会列出n个网址或动作(同步方法,即下载活动) –