如何为foreach创建并行预取
|
给出了在C#,TPL,并行扩展,异步CTP,响应式扩展中执行异步操作的众多新方法。我想知道并行化以下内容的提取和处理的最简单方法是:
foreach(string url in urls)
{
var file = FetchFile(url);
ProcessFile(file);
}
附带条件是,虽然可以随时提取文件,但是“ 1”一次只能处理一个文件,应该依次调用。
简而言之,使FetchFile
和ProcessFile
以流水线方式表现(即同时发生)的最简单方法是什么?
没有找到相关结果
已邀请:
4 个回复
雄鞋谋塘
用法:
编辑:哎呀,还没有注意到文件写入序列化的要求。这部分可以通过使用.Concat来完成,它本质上是一个RX队列(另一个是.Zip)。 让我们有一个.StreamToFile扩展名:
现在您可以并行处理Web请求,但可以序列化来自它们的文件:
净爽
靛新比比催
锑寝粒
基本上,我们为每个URL创建一个异步下载任务,然后在完成任何任务后,调用一个继续操作,该继续操作使用一个普通对象作为同步锁来确保
顺序发生。直到最后一个
延续完成,12ѭ才会返回。 您可以使用RX的ѭ14the避免显式锁定(但当然它将在内部锁定):
在这里,我们使用ѭ14作为文件下载渠道。每次下载均异步完成,并将结果发布到the17ѭ阻止的管道中(即顺序发生)。当所有任务完成时,我们完成可观察的事物,它退出了
。