MrE*_*yes 11 c# file-io thread-safety .net-2.0
作为闲置好奇心的练习,请考虑以下简单的日志记录类:
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...
}
}
}
Run Code Online (Sandbox Code Playgroud)
是否lock需要File.AppendAllText(...)通过自己的实现来保持本身的线程安全?
搜索有关这方面的信息会产生许多相互矛盾的信息,有些人说是,有些人说不.MSDN什么也没说.
jas*_*son 16
File.AppendAllText将要获取日志文件的独占写锁定,这将导致任何并发线程尝试访问该文件以引发异常.所以,是的,您需要一个静态锁定对象来防止多个线程同时尝试写入日志文件并引发IOException.
如果这将是一个问题,我真的建议记录到数据库表,这将更好地处理并发日志编写器.
或者,您可以使用TextWriterTraceListener哪个是线程安全的(好吧,它将为您执行锁定;我宁愿尽可能少地编写自己的多线程代码).
| 归档时间: |
|
| 查看次数: |
10829 次 |
| 最近记录: |