控制.Net Windows服务中的问题

时间:2016-08-04 15:05:14

标签: c# windows task-parallel-library

我在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)

所以需要知道这个特定的代码更改是否真的是这种行为的原因?请指教。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的Parallel.Invoke调用似乎毫无意义,您只需从调用中调用一个操作,这会导致您的代码等同于

 foreach (Product p in Products)
 {
        {//Call a third part web service1}
        {//Call a third part web service2}
 } 

你可以看到为什么这可能需要一段时间才能运行。

但是,即使你修复了这个问题,只是因为它是并行的并不意味着它很快。不要在构造函数中做繁重的工作,在OnStart中生成一个新线程并在那里工作。