我已经实现了如下的日志记录方法:
ThreadPool.QueueUserWorkItem((state) => {
lock (appendLock) {
using (StreamWriter log = File.AppendText(_logFile)) {
log.WriteLine(message);
}
}
}, null);
1:有lock
必要吗?我想线程化日志记录并发现锁已经到位。因此,我没有更改该代码,而是简单地包装了一个工人代表。
2:假设需要锁:这是将包含锁的委托加入队列的正确实现吗?多个线程可能正在请求日志写入的可能性相当高。通过将委托排队到工作线程,文件 I/O 执行的长度不应影响应用程序本身。
3:假设有几个logWriteDelegate
工人已经入队:代表会按照他们被接收的顺序被调用吗?即,现在服务#32 ...现在服务#33