Может ли таймер остановить поток, который теперь работает, возвращаясь из обратного вызова?System.Threading.Timer останавливает поток?
Мне нужен таймер, который запустит некоторую функцию за определенное время. Но эта функция длится больше, чем таймер.
_timer = new System.Threading.Timer(new TimerCallback(Process), null, TimeSpan.Zero, TimeSpan.FromHours(1));
и обратного вызова:
public void Process(Object stateinfo)
{
DateTime dt = DateTime.Now.ToUniversalTime();
//run once a day between 2 and 5 am
if (LastCheckDateTime == DateTime.Today || dt.ToString("HHmm").CompareTo("0200") < 0 || dt.ToString("HHmm").CompareTo("0500") > 0)
return;
try
{
LastCheckDateTime = DateTime.Today;
foo(); //lasts 4 hours
}
catch (Exception ex)
{
LastCheckDateTime = DateTime.MinValue;
//if some problems, Process must start again until 5 am
}
}
Этот код начался сегодня в 2:56 утра, но не закончил, Это потому, что в 5 часов утра он все еще работает?
И как это исправить?
Вы хотите прервать операцию, если длится более тик таймера? –
Нет, это нормально, я просто хочу, чтобы он начинался с 2 и перезапускался до 5, если что-то не так. – tammaco
Что вы подразумеваете под * "до 5" *? если требуется более 3 часов, перезапустите его? –