gpt4 book ai didi

c# - 处理文件的并发读/写

转载 作者:行者123 更新时间:2023-11-30 16:46:38 26 4
gpt4 key购买 nike

我有一个生成随机错误的网络服务,我想我已经找到了错误。

基本上,它是按如下方式读取配置文件,然后加载到 XmlDocument 中:

var config = File.ReadAllText(filename);
xmlDoc.Load(config);

但是,稍后(可能是一秒钟后)更新其中一个配置值并保存文件

xmlDoc.Save(filename);

所以我现在在第一个 READ 操作期间遇到更多错误(不幸的是,原始开发人员添加了一个空的 try block ,所以我现在无法检查),我认为这是因为它正在尝试读取文件,就像另一个进程一样从 IIS 产生的是在 .Save 部分。我不知道 File.ReadAllText 是如何工作的,也不知道它是否会在写入锁定文件时失败。

处理此问题以确保阅读始终有效的最佳解决方案是什么?写入的值只是一个计数器,如果它失败,它会被忽略,因为它不是那么重要,但更希望它被写入。我想我可以将它放入一个单独的配置文件中并接受错误,但我宁愿它只是一个文件。

谢谢。

最佳答案

您可以使用锁来确保读取在写入之前完成,反之亦然。如:

using System;
using System.Threading;

class Program
{
static readonly object _fileAccess = new object();

static void Write()
{
// Obtain lock and write
lock (_fileAccess)
{
// Write data to filename
xmlDoc.Save(filename);
}
}

static void Read()
{
// Obtain lock and read
lock (_fileAccess)
{
// Read some data from filename
xmlDoc.load(filename);
}
}

static void Main()
{
ThreadStart writeT = new ThreadStart(Write);
new Thread(writeT).Start();

ThreadStart readT = new ThreadStart(Read);
new Thread(readT).Start();
}
}

有了锁,Read() 必须等待 Write() 完成,Write() 必须等待 Read() 完成。

关于c# - 处理文件的并发读/写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40294278/

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