c# - 如何用多个线程写入单个文件?

标签 c# multithreading file-io

我正在用 C# 创建 Windows 应用程序,我想在其中写入具有多个线程的多个文件。我从不同的端口获取数据,每个端口都有一个文件。是否有可能为每个端口创建线程并一次又一次地使用相同的线程将数据写入相应的文件? 假设我从端口 10000、10001、10002 获取数据,并且有三个文件 10000.txt、10001.txt 和 10002.txt。我必须创建三个线程分别将数据写入这三个文件,我想一次又一次地使用这些线程。可能吗?如果可能的话,您能提供一小部分代码示例吗?

最佳答案

如评论中所述,这是自找麻烦。

所以,你需要有一个线程安全的编写器类:

public class FileWriter
{
    private ReaderWriterLockSlim lock_ = new ReaderWriterLockSlim();
    public void WriteData(/*....whatever */)
    {
        lock_.EnterWriteLock();
        try
        {
            // write your data here
        }
        finally
        {
            lock_.ExitWriteLock();
        }
    }

} // eo class FileWriter

适合多线程调用。但是,有一个警告。很可能存在锁争用。我使用了 ReadWriterLockSlim 类,因为您可能也想进行读取锁定,见鬼,该类还允许您从读取状态升级。

关于c# - 如何用多个线程写入单个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035029/

相关文章:

c - 这是如何读入文件的?

c# - TryTake 与 GetConsumingEnumerable

python - 关于 python 中线程输出的困惑

c++ - 在没有 c++11 的情况下使用 boost 标记线程退出的正确方法是什么

java - 将对象反序列化到 PC 文件系统并用作资源?

c# - WPF C#,从音频文件中获取信息

c# - 为逗号分隔字符串中的每个值遍历数组

C# 声称我的 SQLite 表不存在,但它确实存在

c# - 在非控制情况下使用 SqlDataSource

阐明 GNU C 库如何定义不可重入函数