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

标签 c# stream

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

注意事项:

  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/

相关文章:

c# - 我可以在 winform 中可靠地使用 WPF 自定义控件吗?

java - 使用流将一组字符串划分为大小为 x 的子集

java - 如何使用java作为服务器传输音乐?

android - 在 Android 上解码 RTP 流 (MPEG4)

c# - 如何以编程方式在 Windows 10 资源管理器的导航 Pane 中创建指向文件夹的链接

javascript - 警报导致滚动顶部

c# - 如何通过 GUID _id 查找文档?

c# - 如何获取 WPF TreeView 的所有元素作为列表?

c# - 读取文本文件并继续格式化

java - 使用 jOOλ 按属性总结 BigDecimal 分组