我在Windows 2012 R2标准版上运行了一个C#windows服务。 我们每天使用服务控制管理器(SCM)停止并启动此服务,这在过去一直运行良好。
但是最近,我们看到了一种行为:
1.我们需要增加服务启动和停止功能的超时
2.此外,当我们尝试停止服务时,我们看到SCM中的此服务的“停止”按钮(以及“开始”按钮)显示为灰色。这迫使我们转到任务管理器,杀死服务并重新开始。
只是想知道这种行为的原因。
显然,在Service的构造函数中添加以下代码之后,这似乎已经开始了:
foreach (Product p in Products)
{
Parallel.Invoke(() => {//Call a third part web service1}
Parallel.Invoke(() => {//Call a third part web service2}
}
(此处的产品清单为200)
所以需要知道这个特定的代码更改是否真的是这种行为的原因?请指教。
感谢您的帮助。
答案 0 :(得分:1)
您的Parallel.Invoke
调用似乎毫无意义,您只需从调用中调用一个操作,这会导致您的代码等同于
foreach (Product p in Products)
{
{//Call a third part web service1}
{//Call a third part web service2}
}
你可以看到为什么这可能需要一段时间才能运行。
但是,即使你修复了这个问题,只是因为它是并行的并不意味着它很快。不要在构造函数中做繁重的工作,在OnStart
中生成一个新线程并在那里工作。