gpt4 book ai didi

c# - TPL 数据流优化

转载 作者:行者123 更新时间:2023-11-30 22:06:02 27 4
gpt4 key购买 nike

我有一个以这种方式设置的 TPL 数据流:

  1. 下载字节数组
  2. 处理数据
  3. 将处理后的数据流式传输到另一个位置

此流程运行良好,但偶尔会在下载文件时遇到备份、连接问题等。我想做的是并行下载,但仍确保执行第 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")

所以在上面的代码片段中,我希望两个 url 同时下载,但重要的是第一个 url 在第二个 url 之前由上传者处理。有人能指出我正确的方向吗?

最佳答案

I'd want the two urls to download simultaneously, but it's important that the first one gets processed by the uploader before the second url

然后只需在该 block 上设置 MaxDegreeOfParallelism,它就会表现得像这样。当同时下载 URL 1 和 2 并且 2 在 1 之前完成时,它仍然会等待 1 完成,然后将 2 发送到下一个 block 。

这可能不是最有效的方法,但它确实确保在管道中的所有 block 中保持处理顺序。

关于c# - TPL 数据流优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23901704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com