有人建议在托管在servicehost对象中时关闭WCF服务及其线程的“干净”方式吗?
调用servicehost.Close();当服务生成其他线程时,它不起作用:/
干杯,
罗布
答案 0 :(得分:1)
如果没有来自服务本身及其产生的线程的协作,那么你无法从外部安全地做到这一点。一种选择是让服务通过特殊方式生成线程,这些方法可以通过主机环境进行控制,并使这些线程进一步协作,以便可以干净地关闭它们。
例如,您可以拥有一个自定义线程池类,该类为每个线程生成对事件的引用,该事件向其发出必须停止处理和关闭的信号。 .NET 4.0将使任务库变得更简单,但同时你必须自己完成它。
此外,如果您正在生成原始线程(而不是使用CLR线程池),则应该注意在这种情况下将它们创建为后台线程。这有助于避免在您希望关闭时保持进程活着(尽管我仍然建议您确保将它们完全关闭)。