c#多线程中的时间戳不正确

时间:2016-11-28 09:47:27

标签: c# multithreading logging timestamp

我在c#中编写自己的记录器。当我在多线程中使用这个记录器时,我遇到了一些问题。它接缝每个线程有不同的时间。记录信息的方法仅针对一个线程锁定,并且文件消息的顺序正确,但是一些时间戳显示某些消息应该在某些消息之前,但是对于100%我确定订单是正确的,时间戳不是。 这是方法:

private void WriteToFile(string message, string label)
{
    lock (this.semaphore)
    {
        var msgLines = message.Split('\n');
        var timeStamp = string.Format("[{0}]", DateTime.Now.ToString("yyyy:MM:dd:HH:mm:ffff"));
        foreach (var line in msgLines)
        {
            if (string.IsNullOrEmpty(line))
            {
                continue;
            }

            var msg = string.Concat(timeStamp, this.groupIndicator, label, line).Trim();
            this.writer.WriteLine(msg);
        }
    }
} 

其中semaphote的类型是object,writer是StreamWriter 还有输出:

[2016:11:15:13:06:2896]---> [MESSAGE] Test message <- one thread    
[2016:11:15:13:06:2973]---> [MESSAGE] Test message <- one thread    
[2016:11:15:13:06:3033]---> [MESSAGE] Test message <- one thread
[2016:11:15:13:06:1956]---> [MESSAGE] Different message  <- different thread

我100%确定邮件的顺序正确,但随着时间的推移会发生一些奇怪的事情。 当我在方法WriteToFile之前添加时间戳时发生奇怪的事情。时间完全一样!

[2016:11:15:15:41:8828]---> [MESSAGE] time: 2016:11:15:15:41:8828, Test message <- one thread 
[2016:11:15:15:41:9064]---> [MESSAGE] time: 2016:11:15:15:41:9064, Test message <- one thread
[2016:11:15:15:41:2515]---> [MESSAGE] time: 2016:11:15:15:41:2515, Different message  <- different thread

我正在寻找其他方法来获取当前时间,但也要根据堆栈溢出DateTime.Now应该是正确的。

1 个答案:

答案 0 :(得分:0)

回答这个问题很容易。 :&gt; 问题在于:DateTime.Now.ToString(“yyyy:MM:dd:HH:mm:ffff”)),这种格式没有秒。我花了一秒钟,实际上是几分钟。