【发布时间】:2015-10-02 13:40:47
【问题描述】:
编辑:当我在 Visual Studio 2013 中运行此代码时,调试器显示 Utc,而不是 Local。这是 Visual Studio 2015 调试器中的一个错误。
编辑:已获取代码并放入独立控制台应用程序,但无法在任一版本的 VS 中重现。无赖。
有人可以向我解释一下您在此屏幕截图中看到的内容是如何可能的吗?!
- 在第 298 行,
endingTimePeriodStartDate被重新定义为其Date值,但设置为DateTimeKind.Utc。 - 在第 300 行,如果
endingTimePeriodStartDate实际上不是DateTimeKind.Utc,则会引发异常。 - 305行的调试器断点命中,表示302行的异常没有抛出,表示
endingTimePeriodStartDate.Kind == DateTimeKind.Utc - (我还在第 305 行之前做了一个
System.Diagnostic.Debug.WriteLine(endingTimePeriodStartDate.Kind),它会在输出窗口中打印“Utc”)。 - 当我在 Locals 和 Watch 调试器窗口中查看
endingTimePeriodStartDate时,当我将鼠标悬停在变量上时,Kind属性显示DateTimeKind.Local
【问题讨论】:
-
你能在一个简短但完整的应用程序中重现这一点吗?我们都可以自己尝试一下吗?
-
当您返回
Task时,我猜您使用async编程 -> 在 Ln 300 和 305 之间的小间隙中是否有可能另一个线程更改endingTimePeriodStartDate? -
你能重现吗?可能是一个令人讨厌的软错误
-
附带说明:您使用的是 VS 2015 和 C# 6 -> 为什么不在 Ln 295 中使用
new ArgumentNullException(nameof(date))来消除“魔术字符串”? -
问题不在于您是否使用异步,而在于是否存在任何并行性。如果函数仍然返回
Task,这仍可能归结为多线程问题
标签: c# visual-studio visual-studio-2015 visual-studio-debugging