Общий хост .net core запускается дважды при развертывании в облачном движке Google. - PullRequest
1 голос
/ 30 апреля 2019
public class Program
{
    public static void Main(string[] args)
    {
        var host = new HostBuilder()
            .ConfigureHostConfiguration(configHost =>
            {
                configHost.SetBasePath(Directory.GetCurrentDirectory());
                configHost.AddJsonFile("hostsettings.json", optional: true, reloadOnChange: true);
                configHost.AddEnvironmentVariables(prefix: "PREFIX_");
                configHost.AddCommandLine(args);
            })
            .ConfigureAppConfiguration((hostContext, configApp) =>
            {
                configApp.SetBasePath(Directory.GetCurrentDirectory());
                configApp.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
                configApp.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true, reloadOnChange: true);
                configApp.AddEnvironmentVariables(prefix: "PREFIX_");
                configApp.AddCommandLine(args);
            })
            .ConfigureServices((hostContext, services) =>
            {
                services.AddScoped(typeof(IAppLogger<>), 

                services.AddHostedService<HostedPaymentService>();
            })
            .ConfigureLogging((hostContext, configLogging) =>
            {
                configLogging.AddConsole();
                configLogging.AddDebug();
            })
            .UseConsoleLifetime()
            .Build();
        host.Run();
    }
}

Вот метод запуска размещенной службы, что-то не так в приведенном ниже коде?

internal class HostedPaymentService : IHostedService, IDisposable
    {
        public Task StartAsync(CancellationToken cancellationToken)
        {
            var currentDateTime = DateTime.Now;
            var dueDateTime = new DateTime(currentDateTime.Year, currentDateTime.Month, currentDateTime.Day, _options.ExecutionHour, _options.ExecutionMinute, 0);
            var dueTimeDiffFromCurrentTime = dueDateTime < currentDateTime ? dueDateTime.AddDays(1) - currentDateTime : dueDateTime - currentDateTime;

            _logger.LogInformation($"Service has started at {DateTime.Now} ");
            _logger.LogInformation($"Job will be triggered at {dueDateTime.ToShortTimeString()}");

            _timer = new Timer(workToBeDone =>
                {
                    _logger.LogInformation($"Invoked at {DateTime.Now}");
                    _recurringPaymentService.Process();
                }, null, TimeSpan.FromSeconds(dueTimeDiffFromCurrentTime.TotalSeconds), TimeSpan.FromHours(24));

            return Task.CompletedTask;
        }
    }

Код внутри метода Start выполняется дважды при развертывании в ядре приложения GCP.Первоначально я использовал Quartz, затем я использовал TimedHostedService, но проблема возникает.Все отлично работает в локальной среде.

...