今天我遇到了Windows服务的一些问题。
服务本身已经运行了一年多,其主要工作是为TCP客户端提供数据流。
不久前,我已经添加了对WCF服务的调用,以发送有关数据流的一些信息。
为了防止这些WCF调用严重影响已有的逻辑,我使用了
<a>
这很好但我注意到如果我尝试在远程WCF服务不可用时通过services.msc停止它,Windows服务会陷入停止状态。
如果远程WCF服务可用或在Windows服务停留在Stopping状态期间可用,则停止服务成功。
经过一些调试后,我发现没有调用Task.Run(() => {
using(var proxy = new WCFProxy("configurationName"))
{
proxy.WCFClientMethod()
}
});
方法。
我在互联网上发现了一些关于OnStop方法的文章,直到OnStop
中的所有任务都完成后才被调用。但我不确定这是否与此问题有关,主要是因为ThreadPool
中的AFAIK任务无论如何都应该完成,无论他们是否ThreadPool
。
我会很感激有关如何解决此问题的任何想法(使用Thread而不是Task.Run不是一个好选项,因为有很多调用WCF服务并且创建这么多线程可能会导致性能问题。)
答案 0 :(得分:0)
刚刚解决了我的问题。
发现WCF调用阻止ThreadPool
中的实际任务
这导致调用OnStop
方法被卡在队列中。
我已经使WCF调用与async/await
异步,现在一切都顺利运行。