public static async Task RunAsync(Func <string, TaskNextRunStatus> action, string tag, TimeSpan period, CancellationToken cancellationToken) { try { TaskNextRunStatus status = TaskNextRunStatus.Continue; while (!cancellationToken.IsCancellationRequested && status == TaskNextRunStatus.Continue) { if (!cancellationToken.IsCancellationRequested) { status = action(tag); } else { status = TaskNextRunStatus.Stop; } if (status == TaskNextRunStatus.Stop) { break; } await Task.Delay(period, cancellationToken); } } catch (Exception e) { Util.Consts.Logger.Error("Run got exception ", e); return; //throw; } }
public static void Run(Func <string, TaskNextRunStatus> action, string tag, TimeSpan period, CancellationToken cancellationToken) { try { TaskNextRunStatus status = TaskNextRunStatus.Continue; while (!cancellationToken.IsCancellationRequested) { if (!cancellationToken.IsCancellationRequested) { status = action(tag); } else { status = TaskNextRunStatus.Stop; } if (status == TaskNextRunStatus.Stop) { Consts.Logger.Info($"InfinitiveTask.Run: ending {tag} because of status STOP"); break; } System.Threading.Thread.Sleep(period); } } catch (Exception e) { Util.Consts.Logger.Error("RunSync got exception ", e); return; //throw; } finally { Consts.Logger.Info($"InfinitiveTask.Run: ended {tag} "); } }