Я пишу своему первому работнику сервиса, который обрабатывает копирование всех записей из одной таблицы в другую каждые 60 секунд. На данный момент все работает как чудо, но после развертывания я не хочу быть уверенным, что все будущие данные будут скопированы за 100 записей за один раз, пока не останется больше записей для копирования - и перерыв 60 секунд.
Код проверки будет копировать каждую запись с заданной даты сразу, а затем ждать 60 секунд.
public void CopyLatestData(DateTime from)
{
using (var context = new EdDbContext())
{
var dataToCopy = context.ELMAH_Errors.Where(x => x.TimeUtc > from).ToList();
var result = dataToCopy.Select(x => new parsed_errors(x)).ToList();
context.parsed_errors.AddRange(result);
context.SaveChanges();
}
}
Вот как я обрабатываю таймер
private static void startTimer()
{
if (timer == null)
{
timer = new Timer();
timer.Interval = 60 * 1000;
timer.Elapsed += timer_ElapsedActions;
timer.Start();
}
}
private static void timer_ElapsedActions(object sender, ElapsedEventArgs e)
{
if (isTaskAlreadyRunning)
{
return;
}
lock (locker)
{
if (!isTaskAlreadyRunning)
{
isTaskAlreadyRunning = true;
try
{
copyDataFromRemoteDatabaseToLocalDatabase();
parseCopiedData();
}
finally
{
isTaskAlreadyRunning = false;
}
}
}
, что является самым простым способомдобиться того, что мне нужно?