Я использую фоновую задачу Asp.net Core Timed для выполнения ежедневной задачи на моем сайте в Amazon ElasticBeanstalk Ec2 t2.micro instance
код от Документы
public Task StartAsync(CancellationToken cancellationToken)
{
DateTime now = DateTime.Now;
DateTime Daily= DateTime.Today.AddHours(8.0);
if (now > Daily)
{
Daily= Daily.AddDays(1.0);
}
var mylog = Path.Combine(Path.GetTempPath(), "mylog.txt");
var logs = new List<string>();
logs.Add(Daily.ToString());
var timeToGo = Daily- now;
logs.Add(timeToGo.ToString());
File.AppendAllLines(mylog, logs);
_timer = new Timer(DoWorkAsync, null, timeToGo,
TimeSpan.FromDays(1));
return Task.CompletedTask;
}
private async void DoWorkAsync(object state)
{
var mylog = Path.Combine(Path.GetTempPath(), "mylog.txt");
var logs = new List<string>();
logs.Add("Resync started at" + DateTime.UtcNow.ToString("s"));
File.AppendAllLines(mylog, logs);
//my task here
}
, но моя регистрация задач показывает, что StartAsync
повторяется в случайное время и что DoWorkAsync
на самом деле не выполняется
вот два образца журнала один, когда DoWorkAsync
не работал в предполагаемое время
4/12/2019 8:00:00 AM <---- when next task will run
05:34:46.1320712 <---- time remaining to run it
4/12/2019 8:00:00 AM <---- that means StartAsync had runned again
02:25:30.0774712
4/12/2019 8:00:00 AM
01:00:23.8784953
4/12/2019 8:00:00 AM
00:21:29.8735978 <---- it should run after this line but no record
4/13/2019 8:00:00 AM
23:43:40.0857128
4/13/2019 8:00:00 AM
вот другой пример журнала, когда DoWorkAsync
запустил
4/11/2019 8:00:00 AM
00:48:47.3551756
4/11/2019 8:00:00 AM
00:17:53.6569079
Resync started at2019-04-11T08:00:00 <---- this message is from DoWorkAsync
other logs of my task
4/12/2019 8:00:00 AM
23:23:28.4222248
4/12/2019 8:00:00 AM
22:29:50.2246145
4/12/2019 8:00:00 AM
Я не знаю, является ли это проблемой AWS Ec2 или IHostedService и какое подходящее решение