Мне нужно вызывать функцию обновления БД по таймеру (раз в минуту). Делаю я это так:
static void Main(string[] args)
{
Work.Program.GetTimer();
....
}
Вот из мейна включаю таймер.
public static async void GetTimer()
{
await Task.Run(() =>
{
var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromMinutes(1);
var timer = new System.Threading.Timer((e) =>
{
GetOnlineBD();
}, null, startTimeSpan, periodTimeSpan);
});
}
Вот сам таймер.
В момент запуска программы все-таки происходит обновление БД, но далее таймер не работает. В чем может быть причина?
Когда вы создаёте таймер через конструктор, принимающий параметр state, ссылка на созданный вами таймер нигде не сохраняется. А значит, сборщик мусора вполне может его собрать, и тогда он перестанет работать.
И да, не надо смешивать разные способы создания таймеров.
Таким образом, основной способ создания таймера - вот такой:
static System.Threading.Timer timer;
// ...
timer = new System.Threading.Timer((e) =>
{
GetOnlineBD();
}, null, startTimeSpan, periodTimeSpan);
Альтернативный способ - можно использовать асинхронные задержки и никаких таймеров:
await Task.Delay(periodTimeSpan);
while (true) {
GetOnlineBD();
await Task.Delay(startTimeSpan);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Устанавливал и настраивал по этой инструкции https://vkcom/away
Всем привет, хехВообщем если не трудно подскажите в чем может быть проблема, метод execute ничего не сохраняет в БД не выдаёт ошибок и возвращает...