C# 第三方物流数据流优化
我以这种方式设置了TPL数据流:C# 第三方物流数据流优化,c#,.net,task-parallel-library,tpl-dataflow,C#,.net,Task Parallel Library,Tpl Dataflow,我以这种方式设置了TPL数据流: 下载字节数组 过程数据 将处理后的数据流到另一个位置 这个流程工作得很好,但在下载文件、连接中断等时偶尔会遇到备份。我想做的是并行下载,但仍然要确保执行步骤3,以便接收方以正确的顺序获得有效负载 var broadcaster = new BroadcastBlock<string>(d => d); var downloader = new TransformBlock<string, byte[]>(async data =
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")
var-broadcaster=新广播块(d=>d);
var downloader=newtransformblock(异步数据=>{
//下载并返回数据
});
var处理器=新TransformBlock(异步数据=>{
//处理和返回数据
});
var uploader=newactionblock(异步输入=>{
//将文件上载到其他位置
});
LinkTo(下载程序);
downloader.LinkTo(处理器);
处理器.LinkTo(上传器);
广播程序。SendAsync(“http://someUrl");
广播程序。SendAsync(“http://someOtherUrl")
因此,在上面的代码片段中,我希望两个url同时下载,但重要的是第一个url在第二个url之前由上传程序处理。有人能给我指一下正确的方向吗
我希望两个url同时下载,但重要的是第一个url在第二个url之前由上传程序处理
然后只需在该块上设置MaxDegreeOfParallelism
,它的行为如下所示。当URL 1和2同时下载并且2在1下载之前完成时,它仍将等待1完成,然后2才会发送到下一个块
这可能不是最有效的方法,但它确实可以确保在管道中的所有块之间保持处理顺序。为什么甚至有3个转换块?你就不能用一个按顺序执行3个步骤吗?当然,但这是模块化的。除此之外,这是从实际逻辑上缩减的…好吧,但我认为这会解决你的问题。3个助手函数同样是模块化的,不那么复杂。啊,你说得对!我只是假设,一旦块被并行化,它只会维护块的执行顺序,而不会维护数据被推送的顺序。@user2339814是的,我第一次了解到这一点时也感到惊讶。