0

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

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

4

1 回答 1

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 方法),但我认为它可能对您有所帮助。

于 2012-09-27T15:59:58.493 回答