title: StopAsync not called in worker service in .net core 3 when running as Windows service
body: <p>wonder if you guys have encountered this before. I wanted to have grpc server+web api running as windows service as it's meant for a long runningprocess. The web API is basically just for runtime monitoring of internal states.. So I created a new grpc service (.net core 3), and add in the worker class, and add the controller etc..  and used the Microsoft.Extensions.Hosting.WindowsServices nuget package to enable Windows service. I used "sc create  binpath=  start= auto" to install it, then used "sc start " to start it.. observing the log file, I can see it's started, accessing the swagger page, I can see it's running fine. </p>
  
  <p>I'm logging something to the log file when the StartAsync and StopAsync are called in the worker class and I can see that when the service starts, StartAsync is called, as it should be. </p>
  
  <p>Now the funny thing is this, when the system is restarted, I don't see StopAsync being called.. </p>
  
  <p>in DOS, if I used dotnet .exe to run it, StartAsync is called, pressing CTRL+C to stop it, StopAsync is called.. but why is StopAsync not called when it's running as windows service and system is restarted? is this a bug in the windwos service nuget package itself? or am I missing something here?</p>
  
  <p>Funny thing is, in Startup class, I even used IHostApplicationLifetime to intercept the ApplicationStarting, ApplicationStopping, but again, starting is called, but stopping is not called.. why? </p>
  
  <p>can someone please enlighten me?</p>