Windows служба не ждет окончания выполнения задач - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу сервис windows, который создает для запуска пару задач Parallels: Ниже приведен пример кода:

       private static void TaskMethod1()
       {
          //I am doing a bunch of operations here, all of them can be replaced with a sleep for 25 minutes
       }

       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 минут, и его можно изменить с помощью реестра Настройки, мне просто интересно, есть ли такой способ, что служба будет ждать завершения каждой задачи вместо жесткого кодирования в это время через реестр.

1 Ответ

0 голосов
/ 14 апреля 2020

В моих основных службах. net я использую интерфейс IHostApplicationLifetime для перехвата, когда моя служба закрыта, путем регистрации действия для вызова с использованием IHostApplicationLifetime.ApplicationStopped.Register(Action callback). Затем в обратном вызове вы можете дождаться завершения задачи.

...