From 3b8d96572704166a82f4d445c16bbade81effd81 Mon Sep 17 00:00:00 2001 From: jx Date: Sat, 30 Mar 2024 19:34:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0RunNow=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E4=BB=A5=E5=8F=8ARunning=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scheduler/DefaultScheduler.cs | 6 +++++ src/Longbow.Tasks/Scheduler/IScheduler.cs | 5 ++++ .../Scheduler/SchedulerProcess.cs | 1 + src/Longbow.Tasks/Trigger/TriggerProcess.cs | 26 ++++++++++++------- src/Longbow.Tasks/Trigger/TriggerResult.cs | 7 ++++- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/Longbow.Tasks/Scheduler/DefaultScheduler.cs b/src/Longbow.Tasks/Scheduler/DefaultScheduler.cs index 597e395..d5444d6 100644 --- a/src/Longbow.Tasks/Scheduler/DefaultScheduler.cs +++ b/src/Longbow.Tasks/Scheduler/DefaultScheduler.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; namespace Longbow.Tasks; @@ -51,6 +52,11 @@ internal class DefaultScheduler : IScheduler /// public ITask? Task { get; set; } + public void RunNow() + { + SchedulerProcess?.Triggers.FirstOrDefault()?.RunNow(new CancellationToken()); + } + /// /// 获得/设置 任务调度状态 /// diff --git a/src/Longbow.Tasks/Scheduler/IScheduler.cs b/src/Longbow.Tasks/Scheduler/IScheduler.cs index b78b1b1..921770e 100644 --- a/src/Longbow.Tasks/Scheduler/IScheduler.cs +++ b/src/Longbow.Tasks/Scheduler/IScheduler.cs @@ -54,4 +54,9 @@ public interface IScheduler /// 获得 调度器相关联任务 /// ITask? Task { get; } + + /// + /// 立即运行 + /// + void RunNow(); } diff --git a/src/Longbow.Tasks/Scheduler/SchedulerProcess.cs b/src/Longbow.Tasks/Scheduler/SchedulerProcess.cs index 43dcbb4..98cffce 100644 --- a/src/Longbow.Tasks/Scheduler/SchedulerProcess.cs +++ b/src/Longbow.Tasks/Scheduler/SchedulerProcess.cs @@ -116,6 +116,7 @@ internal class SchedulerProcess(DefaultScheduler scheduler, Action logge var taskToken = CancellationTokenSource.CreateLinkedTokenSource(token, taskCancelTokenSource.Token); if (!taskToken.IsCancellationRequested && TaskContext != null) { + trigger.LastResult = TriggerResult.Running; await TaskContext.Execute(taskToken.Token).ConfigureAwait(false); trigger.LastResult = TriggerResult.Success; } diff --git a/src/Longbow.Tasks/Trigger/TriggerProcess.cs b/src/Longbow.Tasks/Trigger/TriggerProcess.cs index 8b63bbc..1894a71 100644 --- a/src/Longbow.Tasks/Trigger/TriggerProcess.cs +++ b/src/Longbow.Tasks/Trigger/TriggerProcess.cs @@ -77,17 +77,9 @@ internal class TriggerProcess(string name, Action loggerAction, ITrigger while (!_cancelTokenSource.IsCancellationRequested) { if (!Trigger.Pulse(_cancelTokenSource.Token)) break; - LoggerAction($"{Trigger.GetType().Name} PulseAsync() Trigger.Enabled({Trigger.Enabled}) Cancelled({_cancelTokenSource.IsCancellationRequested})"); - // 立刻运行一次 - var sw = Stopwatch.StartNew(); - await DoWork(_cancelTokenSource.Token).ConfigureAwait(false); - sw.Stop(); - - Trigger.LastRunElapsedTime = sw.Elapsed; - Trigger.PulseCallback?.Invoke(Trigger); - LoggerAction($"{Trigger.GetType().Name} {nameof(DoWork)}({Trigger.LastResult}) Elapsed: {Trigger.LastRunElapsedTime} NextRuntime: {Trigger.NextRuntime}"); + await RunNow(_cancelTokenSource.Token); if (Trigger.NextRuntime == null) break; // 持久化 @@ -104,4 +96,20 @@ internal class TriggerProcess(string name, Action loggerAction, ITrigger _triggerCancelTokenSource?.Cancel(); LoggerAction($"{nameof(TriggerProcess)} Stop() called"); } + + /// + /// 立即执行一次 + /// + /// + public async Task RunNow(CancellationToken cancellationToken) + { + // 立刻运行一次 + var sw = Stopwatch.StartNew(); + await DoWork(cancellationToken).ConfigureAwait(false); + sw.Stop(); + + Trigger.LastRunElapsedTime = sw.Elapsed; + Trigger.PulseCallback?.Invoke(Trigger); + LoggerAction($"{Trigger.GetType().Name} {nameof(DoWork)}({Trigger.LastResult}) Elapsed: {Trigger.LastRunElapsedTime} NextRuntime: {Trigger.NextRuntime}"); + } } diff --git a/src/Longbow.Tasks/Trigger/TriggerResult.cs b/src/Longbow.Tasks/Trigger/TriggerResult.cs index 204e61f..e0e63f8 100644 --- a/src/Longbow.Tasks/Trigger/TriggerResult.cs +++ b/src/Longbow.Tasks/Trigger/TriggerResult.cs @@ -25,5 +25,10 @@ public enum TriggerResult /// /// 故障 /// - Error = 3 + Error = 3, + + /// + /// 正在运行 + /// + Running = 4 } -- Gitee