Как правильно реализовать повторяющиеся действия через определенный промежуток времени?

Есть "функция" которая может выполняться 30 секунд, а может 30 минут. Поэтому промежуток времени должен быть не между двумя вызовами функции, а одним завершением функции и ее следующим вызовом. Пока это выглядит как-то так (это не реальный код, а пример, так что не нужно бомбить):

public class MyBackgroundWorker : BackgroundWorker
{
    public Boolean Terminated = false;

    protected override void OnDoWork(DoWorkEventArgs e)
    {
        while (true)
        {
            MyFunc(); // время выполнения данной функции неизвестно

            Thread.Sleep(60000);

            if (Terminated)
                return; 
        }
    }
}


В данном примере приходится ждать 10 минут для корректного завершения работы потока.
Этот вариант просто первое что пришло в голову.

Как вообще правильно реализовать повторяющиеся действия через определенный промежуток времени?
  • Вопрос задан
  • 1098 просмотров
Решения вопроса 2
@Hydro
C#/.NET Developer
var timer = new System.Timers.Timer();
timer.Interval = 10000;
timer.Start();
timer.Elapsed += (sender, args) =>
{
  timer.Enabled = false;
  // action
  timer.Enabled = true;
};

Как то так
Ответ написан
petermzg
@petermzg
Самый лучший программист
Ваш код тоже подойдет.
Только вместо Thread.Sleep(60000); лучше
waitEvent.WaitOne(60000);
// где
waitEvent = new ManualResetEvent(false);

Установите event в сигнальное состояние и ожидание прервется.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы