我的程序经常出现死锁。当我使用break-all并查看线程时,发现三个线程被卡在我们的日志函数中:
public class Logging
{
public static void WriteClientLog(LogLevel logLevel, string message)
{
#if DEBUG
System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}", DateTime.Now.ToString("HH:mm:ss"), message)); //LOCK
#endif
//...Log4net logging
}
}
如果我让程序继续运行,线程仍然会停留在那一行。
我看不出这里哪里可能会锁死。调试类、字符串类和日期时间类似乎都是线程安全的。
当我删除
#if DEBUG System... #endif
代码时,错误就消失了,但我很好奇为什么会发生这种情况。线程一:
public void CleanCache()
{
Logging.WriteClientLog(LogLevel.Debug, "Start clean cache.");//Stuck
}
第二个线程:
private void AliveThread()
{
Logging.WriteClientLog(LogLevel.Debug, "Check connection");//Stuck
}