Я поддерживаю некоторый код, который выглядит примерно так. Это служба Windows, которая выполняет некоторую работу каждые 30 минут. Метод ActualWorkDoneHere занимает около 30 секунд для запуска, но если он остановлен во время работы, он может оставить вещи в плохом состоянии. Каков наилучший способ предотвратить это? Должен ли я заменить значение While (true) на логическое значение, которое установлено в методе onstop (исключение прерывания потока)? Есть ли способ узнать, спал ли поток?
namespace WorkService
{
public partial class WorkService : ServiceBase
{
private Thread _workerThread = null;
public WorkService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_workerThread = new Thread(new ThreadStart(DoWork));
_workerThread.Start();
}
protected override void OnStop()
{
_workerThread.Abort();
}
static void DoWork()
{
int sleepMinutes = 30;
while (true)
{
ActualWorkDoneHere();
System.Threading.Thread.Sleep(new TimeSpan(0, sleepMinutes, 0));
}
}
}
}