gpt4 book ai didi

c# - 在文件流传输中实现停止和重新启动 - 如何实现? C# 网络

转载 作者:行者123 更新时间:2023-11-30 17:14:48 26 4
gpt4 key购买 nike

我正在寻找有关在文件流传输中实现停止和重启的文本或建议。

目标是让应用程序使用单个读取源,并输出到多个写入源,并且能够在传输失败时从记录的位置重新启动。

应用程序是用 C# .NET 编写的。

伪代码:

while (reader.Read())
{
foreach(writer in writers)
{
writer.WriteToStream();
}
}

我需要能够实现停止或暂停。哪个可以这样工作。要停止,continue 被标记为 false:

while (reader.Read() && Continue)
{
foreach(writer in writers)
{
writer.WriteToStream();
}
}

显然在这个阶段我需要记录读取的字节数,以及写入每个写源的字节数。

我的问题是:

如果我只记录读取的字节,并将其用于重新启动,一个或多个作者可能已经写了,而其他人没有。简单地使用读取进度的度量重新启动可能会损坏写入的数据。所以我需要使用“每个作者写入的字节数”记录作为我的新起始位置。我如何确定字节已写入(我可能无法从写入源读取文件以读取文件长度)?

任何人都可以建议或指出有关此类问题的文本的正确方向吗?

最佳答案

使用线程同步事件。

(伪代码):

ManualResetEvent _canReadEvent = new ManualResetEvent(true);

public void WriterThreadFunc()
{
while (_canReadEvent.Wait() && reader.Read())
{
foreach(writer in writers)
{
writer.WriteToStream();
}
}
}

public void Pause()
{
_canReadEvent.Reset();
}

public void Continue()
{
_canReadEvent.Set();
}

好处是写入线程在暂停时不会消耗任何 CPU,它会直接继续(而不是使用标志和 Thread.Sleep())

另一个注意事项是任何检查都应该是 while 中的第一个 参数。自 reader.Read()否则将从流中读取(但内容将被忽略,因为该标志将阻止执行 while block )。

关于c# - 在文件流传输中实现停止和重新启动 - 如何实现? C# 网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398642/

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