gpt4 book ai didi

.net - TransformBlock 发布到输出

转载 作者:行者123 更新时间:2023-12-03 14:50:20 25 4
gpt4 key购买 nike

我的情况是我有一个 BufferBlock<Stream>接收Stream来自外部来源,比如说文件系统或某些 FTP 服务器。这些文件Stream s 将进入另一个块并进行处理。

唯一的问题是其中一些文件被压缩了,我想添加一个 Block在中间会在必要时解压文件,并创建多个输出 Stream的每个条目。

但是我不想使用 TransformBlockMany ,因为这意味着我必须完全接收 ZIP Stream并创建输出 Stream一次数组。

我想要这个 Block接收 zip Stream ,开始解压,然后 Push每当 Entry 准备好时就转移到下一个流,因此 Process Block 可以在第一个文件解压缩后立即开始处理,而不是等到所有内容都解压缩。

我该怎么做呢?

最佳答案

我知道我的问题是无法使用 yield/async一起 。但是在重构之后,我摆脱了这种需求,并提出了以下(简化)版本:

var block = new TransformManyBlock<Stream, Stream>((input) => {
var archive = new System.IO.Compression.ZipArchive(input, System.IO.Compression.ZipArchiveMode.Read, true);
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (string.IsNullOrWhiteSpace(entry.Name)) //is a folder
continue;

yield return entry.Open();

}

});

关于.net - TransformBlock 发布到输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905967/

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