gpt4 book ai didi

c# - 并行使用多个 Stream.BeginWrite 是否线程安全?

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:03 25 4
gpt4 key购买 nike

我有一个文件要填满,所以我想最好同时完成。

注意事项:

  1. 我同时从多台计算机获取文件。
  2. 我每次都在调用 StartWrite 之前设置位置。 -> 我是否必须在每次使用前锁定它?

它好用吗?你有更好的吗?

顺便说一句,Stream.Flush() 是什么?

谢谢。

最佳答案

不,这在概念上是错误的。 Stream(我假设你的意思是 System.IO.Stream 类)是一个抽象类。当您实例化一个对象时,您正在使用许多子类之一。

假设任何关于子类的方法都是错误的,因为:

a) 有人可能会追着你修改你的代码,却看不到实际的子类实现做了什么。b) 不太可能,但实现可能会改变。例如,如果有人在 Mono 框架上安装您的代码怎么办。

如果您正在使用 FileStream 类,请考虑使用 FileShare 在同一基础文件上创建两个(或更多)FileStream 对象。参数设置为写入。通过这种方式,您可以指定可能同时写入,但每个流都有自己的位置指针。

更新:现在我才看到你的评论“每台计算机都给我发送一个包含起始索引、结束索引和字节[]”的部分。实际上,对于这种情况,多个 FileStreams 应该可以正常工作。

    void DataReceived(int start, byte[] data)
{
System.IO.FileStream f = new System.IO.FileStream("file.dat", System.IO.FileMode.Open, System.IO.FileAccess.Write, System.IO.FileShare.ReadWrite);
f.Seek(start, System.IO.SeekOrigin.Begin);
f.Write(data, start, data.Length);
f.Close();
}

关于c# - 并行使用多个 Stream.BeginWrite 是否线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331894/

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