【问题标题】:ContextSwitchDeadlock error in scheduled console app计划的控制台应用程序中的 ContextSwitchDeadlock 错误
【发布时间】:2012-09-27 14:09:21
【问题描述】:

我正在开发一个控制台应用程序,该应用程序由一个不再在这里工作的人开发。在调试时,抛出了 ContextSwitchDeadlock 异常(我在异常上发现了这个question)。如果我忽略它,该应用程序最终将通过它发生的循环运行。该应用程序每天作为计划任务运行,但并不是每次都调用此特定进程。

我想知道是否可以允许此异常投入生产。除了这个例外,这个应用程序的作者将它投入生产,并且从那时起它一直在运行。我是否应该只进行(与此异常无关的)更新并将应用程序保持原样?还是我应该尝试解决这个问题?解决它对我来说似乎令人生畏:/

【问题讨论】:

  • 嗯,这并不是控制台模式应用程序的常见警告。你需要解释你使用什么样的 COM 对象来进行调用。否则只是调试器警告,而不是错误。如果程序最终完成,那么它实际上并不是死锁。

标签: vb.net exception scheduled-tasks console-application production-environment


【解决方案1】:

本。我会说“不”。除非您的异常是 ThreadAbortException(即用户关闭了一个窗口,因此进程已死)或类似的事情,否则这样的异常可能会使您的代码出现级联故障。根据我们在哪里工作:

  1. 我认为,作为一种创可贴,您应该使用 Try-Catch 封装有问题的代码,并将其连接起来,以便在每次捕获时向您发送一封电子邮件,以便您有关于发生了什么的文档,以便您可以防止级联故障在整个代码中传播(隔离问题)。

  2. 进行修复(当你有时间的时候),调试它并逐步找出你的主线程为什么要花这么长时间,如果可以的话,创建一个工作线程来处理它(免责声明:这将根据您提供的链接的答案,成为我在这个问题上的开场角。我没有测试过这个,我也没有足够的经验来明确地说这会起作用)。

编辑:在我自己运行一个特别长时间的进程遇到此错误后,我在 msdn 上遇到了这些答案:

http://social.msdn.microsoft.com/Forums/en/vsto/thread/bf71a6a8-2a6a-4c0a-ab7b-effb09451a89

虽然我解决了我的错误(我正在将 System.IO.FileStream 读入 String Builder,而不是使用 String 和 StreamReader ReadToEnd 方法),但我认为它可能对您有所帮助。

【讨论】:

  • 别担心,我没有忘记你的回答。这个项目暂时搁置了,等我重新开始工作,我会进一步调查。
  • 感谢 Ben,作为开发人员,我完全理解。不过,我真诚地感谢您的评论!
  • 我想我可能已经找到了解决办法。该代码声明了一个 StreamReader,例如“Dim input As New StreamReader(FileName)”。我将其更改为 Using 块,例如“将输入用作新 ​​StreamReader(FileName)...End Using”。
猜你喜欢
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多