Я сделал эту небольшую программу, которая имеет интересное поведение, которое я не могу обойти. Идея состоит в том, чтобы это действовало как планировщик, оно выполнит команду по прошествии определенного времени. Все работает по назначению, но когда я пошел на остановку службы, я понял несколько вещей. 1. Сервис занимает много времени, чтобы завершить работу. Когда-то более 30 минут, я тоже должен был убить ПИД. 2. Чем дольше служба работает, тем дольше она останавливается. Я думаю, что это имеет какое-то отношение к тому, сколько раз команда была выполнена. 3. Я думаю, что чем короче интервал между каждой итерацией, тем проще закрыть службу.Служба Windows не остановится
Вот код, который я использую.
public void Start()
{
_cancellationToken = new CancellationTokenSource();
var token = _cancellationToken.Token;
_pollingTask = Task.Factory.StartNew(
() =>
{
while (true)
{
try
{
Log.Debug("Call Import PDF");
ConnectUncPaths();
ImportPdf();
Thread.Sleep(Intervall * 60000);
if (token.IsCancellationRequested)
break;
}
catch (Exception)
{
DissconnectUncPaths();
}
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
}
public void Stop()
{
_cancellationToken.Cancel();
_pollingTask.Wait();
}
А вот скриншот
'Thread.Sleep (Intervall * 60000);' - не очень хорошая идея. –
Если только потому, что даже небольшой «интервал» из 10 подразумевает 10 минут ожидания ... –
Проверить http://stackoverflow.com/a/12886071/2224701 –