1

这是我的问题:

如何处理方法执行的超时,场景如下:

我有一个 C# .Net 框架 4.0 Windows 服务应用程序。我添加了对外部 COM 程序集(某个公司的特定软件)的引用。通过这个程序集,我打算针对我的 Windows 服务上的第三方软件处理一些信息,并每 X 分钟重复一次该任务(由用户定义)。这在一个完美的场景中效果很好,问题是当第三方软件出现问题时,该程序集没有响应并且我的 Windows 服务卡在该执行上而没有答案,例如这是该执行的代码:

    var calObj = new CAL.Object(CalOperatins.SendNoSavingChanges);
//this SYNC execution method sometimes get stuck and 
//the rest of the program just doesn't executes
calObj.TerminateUserSession();

log.Log4Text(string.Format("Service cycle ended, waiting {0} for next execution.",paramTime));
}

正如我在代码注释中提到的,TerminateUserSession的执行是同步的,如果该软件试验了一些问题,我的服务就会卡在那里,并且Log4Text方法(以及它下面的所有内容)都不会执行。

有没有一种方法可以处理TerminateUserSession方法执行的超时,请记住它是一个外部程序集,我不能更改该代码?(是的,我可以发现它是错误的,因为没有超时)

提前致谢。

4

1 回答 1

3

在您有句柄的线程上运行该代码怎么样。您可以通过来回切换布尔值来跟踪成功执行,如果线程在指定的超时前没有响应,则终止线程。杀死线程后,您可以重新启动它。但是,这不是一个完美的解决方案,当您终止似乎总是花费过多时间的线程时,您可能必须重新创建您的 COM 对象。

这也取决于 COM 对象中发生的情况以及 TerminateUserSessions 方法是否可以处理该效果。

于 2011-08-05T13:41:49.993 回答