计划的控制台应用程序中的ContextSwitchDeadlock错误

时间:2012-09-27 14:09:21

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

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

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

1 个答案:

答案 0 :(得分:1)

本。我会说'不'。除非你的异常是一个ThreadAbortException(即用户关闭了一个窗口,因此进程已经死了)或者其他类似的东西,这样的异常可能会导致你的代码出现级联故障。根据我们在哪里工作:

  1. 我认为,作为乐队助手,您应该使用Try-Catch封装有问题的代码,然后将其连接起来,每次捕获时都会向您发送一封电子邮件,这样您就可以获得有关正在发生的事情的文档,以便防止级联故障在整个代码中传播(隔离问题)。

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

  3. 编辑:在我自己遇到一个特别长时间运行的过程中遇到此错误后,我在msdn上遇到了这一系列答案:

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

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