我正在开发一个由不再在这里工作的人开发的控制台应用程序。在调试时,抛出了ContextSwitchDeadlock异常(我在异常中找到了这个question)。如果我忽略它,应用程序最终将通过它发生的循环工作。应用程序每天作为计划任务运行,但不会每次都调用此特定进程。
我想知道是否可以允许此异常进入生产阶段。这个应用程序的作者使用此例外将其投入生产,并且从那时起它一直在运行。我应该让我(与此例外无关)更新并保持应用程序不变吗?或者我应该尝试解决这个问题?解决这个问题对我来说似乎令人生畏:/
答案 0 :(得分:1)
本。我会说'不'。除非你的异常是一个ThreadAbortException(即用户关闭了一个窗口,因此进程已经死了)或者其他类似的东西,这样的异常可能会导致你的代码出现级联故障。根据我们在哪里工作:
我认为,作为乐队助手,您应该使用Try-Catch封装有问题的代码,然后将其连接起来,每次捕获时都会向您发送一封电子邮件,这样您就可以获得有关正在发生的事情的文档,以便防止级联故障在整个代码中传播(隔离问题)。
为了修复(当你有时间),调试它并逐步找出你的主线程花了这么长时间的原因,如果可以的话,创建一个工作线程来处理它(免责声明:这会根据你提供的链接的答案,这是我在这个问题上的开放攻击角度。我没有测试过这个,也没有足够的经验来明确说这会起作用)。
编辑:在我自己遇到一个特别长时间运行的过程中遇到此错误后,我在msdn上遇到了这一系列答案:
http://social.msdn.microsoft.com/Forums/en/vsto/thread/bf71a6a8-2a6a-4c0a-ab7b-effb09451a89
虽然我解决了我的错误(我正在将System.IO.FileStream读入String Builder而不是使用String和StreamReader ReadToEnd方法),但我认为它可能会对您有所帮助。