Windows服务不等待正在运行的任务完成

问题描述 投票:0回答:1

我正在编写Windows服务,该服务创建了几个要运行的并行任务:以下是示例代码段:

       private static async Task TaskMethod()
       {
           while(runningService)
           {
              // Thi will create more than one task in parallel to run and each task can take upto 30 minutes to finish
              Task.Run(() => TaskMethod1(arg1);
           }
       }
       internal static void Start()
        {
            runningService = true;
            Task1 = Task.Run(() => TaskMethod());
        }

        internal static void Stop()
        {
            runningService = false;
            Task1.Wait();
        }

现在,当我停止服务时,它不会创建任何新任务,因为runningService = false,但是Windows服务不会等待30分钟就可以完成已经运行的任务。

现在我读到服务有一个x分钟的超时,可以使用注册表设置来更改它,我只是想知道是否有一种方法可以使服务等待每个任务完成,而不是通过注册表。

c# service windows-services
1个回答
-1
投票

在我的.net核心服务中,当我的服务被关闭时,我使用接口IHostApplicationLifetime进行拦截,方法是使用IHostApplicationLifetime.ApplicationStopped.Register(Action callback)注册要调用的操作。然后,您可以在回调中等待任务完成。

© www.soinside.com 2019 - 2024. All rights reserved.