using Sony.Filtr.Tasks.Tasks; using System; using System.Threading; using System.Threading.Tasks; namespace Sony.Filtr.Tasks.Helpers { public static class TaskHelper { public static Task CreateLongRunningThread(CancellationToken cancellationToken, Action action, TimeSpan iterationDelay) { return Task.Factory.StartNew(async () => { while (true) { if (cancellationToken.IsCancellationRequested) { break; } action(); await Task.Delay(iterationDelay); } }, TaskCreationOptions.LongRunning); } public static Task CreateLongRunningLoggingThread(CancellationToken cancellationToken, Func messageGenerator, ActionTracker actionTracker, TimeSpan iterationDelay) { return CreateLongRunningThread( cancellationToken, () => { actionTracker.AddTrace(messageGenerator()); }, iterationDelay); } } }