我以这种方式设置了TPL数据流:
此流程效果很好,但偶尔会在下载文件,连接打嗝等时遇到备份。我想要做的是并行下载但仍然确保执行第3步以便接收方获取有效载荷的顺序正确。
var broadcaster = new BroadcastBlock<string>(d => d);
var downloader = new TransformBlock<string, byte[]>(async data => {
// Download and return data
});
var processor = new TransformBlock<byte[], byte[]> (async data => {
// Process and return data
});
var uploader = new ActionBlock<byte[]>(async input => {
// Upload file to another location
});
broadcaster.LinkTo(downloader);
downloader.LinkTo(processor);
processor.LinkTo(uploader);
broadcaster.SendAsync("http://someUrl");
broadcaster.SendAsync("http://someOtherUrl")
因此,在上面的代码片段中,我希望同时下载两个网址,但重要的是第一个网址在第二个网址之前由上传程序处理。有人能指出我正确的方向吗?
答案 0 :(得分:3)
我想要同时下载两个网址,但重要的是第一个网址在第二个网址之前由上传程序处理
然后在该块上设置MaxDegreeOfParallelism
,它将表现得像这样。当同时下载URL 1和2并且1在1之前完成时,它仍将等待1完成,然后将2发送到下一个块。
这可能不是最有效的方法,但它确实确保了管道中所有块的处理顺序。