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, но проблема возникает.Все отлично работает в локальной среде.