gpt4 book ai didi

c# - .NET 2.0 : File. AppendAllText(...) - 线程安全实现

转载 作者:可可西里 更新时间:2023-11-01 08:40:00 24 4
gpt4 key购买 nike

作为无聊的好奇心练习,考虑以下简单的日志记录类:

internal static class Logging
{
private static object threadlock;

static Logging()
{
threadlock = new object();
}

internal static void WriteLog(string message)
{
try
{
lock (threadlock)
{
File.AppendAllText(@"C:\logfile.log", message);
}
}
catch
{
...handle logging errors...
}
}
}

File.AppendAllText(...) 周围是否需要,或者该方法本身的实现是线程安全的?

搜索这方面的资料会得到很多相互矛盾的信息,有人说是,有人说不是。 MSDN 什么也没说。

最佳答案

File.AppendAllText 将在日志文件上获取独占写锁,这将导致任何试图访问该文件的并发线程抛出异常。所以是的,您需要一个静态锁对象来防止多个线程同时尝试写入日志文件并引发 IOException

如果这会成为一个问题,我真的建议将日志记录到一个数据库表中,这样可以更好地处理并发日志编写器。

或者,您可以使用 TextWriterTraceListener这是线程安全的(好吧,它将为您进行锁定;我宁愿尽可能少地编写自己的多线程代码)。

关于c# - .NET 2.0 : File. AppendAllText(...) - 线程安全实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4809843/

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