gpt4 book ai didi

c# - Debug.WriteLine 锁

转载 作者:太空狗 更新时间:2023-10-30 01:27:28 27 4
gpt4 key购买 nike

我的程序经常因死锁而停止。当我执行 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
}

最佳答案

Debug.WriteLine将日志记录消息写入附加到 Listeners 的附加跟踪监听器收藏。

您的某个跟踪监听器内部必须有锁,这会导致死锁。检查您的监听器代码,因为它很可能是罪魁祸首。

关于c# - Debug.WriteLine 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759301/

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