У меня есть Windows служба, которая контролирует мое приложение, выполняя пару тестов каждую секунду. Был представлен отчет об ошибке, в котором говорилось, что служба перестает работать через некоторое время, и я пытаюсь выяснить, почему.
Я подозреваю, что приведенный ниже код является виновником, но у меня проблемы с пониманием, как именно оно работает. Недавно был закомментирован оператор ContinueWith, но я не знаю, нужен ли он
private Task CreateTask(Action action)
{
var ct = _cts.Token;
return Task.Run(async () =>
{
ct.ThrowIfCancellationRequested();
var sw = new Stopwatch();
while (true)
{
sw.Restart();
action();
if (ct.IsCancellationRequested)
{
_logger.Debug("Cancellation requested");
break;
}
var wait = _settings.loopStepFrequency - sw.ElapsedMilliseconds;
if (wait <= 0) // No need to delay
continue;
// If ContinueWith is needed wrap this in an ugly try/catch
// handling the exception
await Task.Delay(
(int)(_settings.loopStepFrequency - sw.ElapsedMilliseconds),
ct); //.ContinueWith(tsk => { }, ct);
}
_logger.Debug("Task was cancelled");
}, _cts.Token);
}
Есть ли очевидные проблемы с этим кодом?