I have application running as service. The application is starting up several seconds, because of connection to database etc. I have another service application depending on the first one.

Therefore I need to distinguish 'starting phase' from the 'running phase', so I know when to start another service.

To simplify problem, I have service declared like following example:

```
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
       .ConfigureServices((hostContext, services) =>
       {
           services.AddHostedService<Worker>();
       })
       .UseWindowsService();
}

public class Worker : IHostedService
{
    public async Task StartAsync(CancellationToken cancellationToken)
    {
        // simulate loading... non of this cause wait
        Thread.Sleep(5000);
        await Task.Delay(5000);
    }

    public async Task StopAsync(CancellationToken cancellationToken)
    {
        await Task.Delay(1);
    }
}

```

I'm reproducing this issue by starting up the program with Windows Service Manager and it's started within a second, definitely not 10 seconds (in this case).

Note #1: I have played with inhering from BackgroundService class, but result was pretty much same.

Note #2: The behavior is same on linux with systemd, when using extension method `.UseSystemd()`.

Is there any way how can I split the starting of service from its execution?