gpt4 book ai didi

c# - ASP.NET 应用程序中的文件锁定(读/写)

转载 作者:行者123 更新时间:2023-11-30 19:52:08 24 4
gpt4 key购买 nike

我有两个 ASP.NET Web 应用程序。一个负责处理一些信息并写入日志文件,另一个应用程序负责读取日志文件并根据用户请求显示信息。 p>

这是我的 Writer 代码

public static void WriteLog(String PathToLogFile, String Message)
{
Mutex FileLock = new Mutex(false, "LogFileMutex");
try
{
FileLock.WaitOne();
using (StreamWriter sw = File.AppendText(FilePath))
{
sw.WriteLine(Message);
sw.Close();
}
}
catch (Exception ex)
{
LogUtil.WriteToSystemLog(ex);
}
finally
{
FileLock.ReleaseMutex();
}
}

这是我的阅读器代码:

private String ReadLog(String PathToLogFile)
{
FileStream fs = new FileStream(
PathToLogFile, FileMode.Open,
FileAccess.Read, FileShare.ReadWrite);
StreamReader Reader = new StreamReader(fs);
return Reader.ReadToEnd();
}

我的问题是,上面的代码是否足以防止在网络花园环境中锁定?

编辑 1: 脏读没问题。编辑 2: 使用 new Mutex(false, "LogFileMutex") 创建 Mutex,关闭 StreamWriter

最佳答案

听起来您正在尝试实现一个基本队列。为什么不使用可以保证可用性的队列。您可以将消息放入 MSMQ,然后实现一个 Windows 服务,该服务将从队列中读取并将消息推送到数据库。如果写入数据库失败,您只需将消息留在队列中(尽管您会想要处理位置消息,因此如果它失败导致数据错误,您不会陷入无限循环)

这将消除所有锁定问题,并为您提供有保证的交付给您的读者...

关于c# - ASP.NET 应用程序中的文件锁定(读/写),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/430879/

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