diff --git a/src/Longbow.Tasks/Scheduler/DefaultScheduler.cs b/src/Longbow.Tasks/Scheduler/DefaultScheduler.cs
index 597e395c31cbaf98f0b6b72ecafef19d880bbe88..d5444d601950905b3e1335c9d97eefe96c9127c7 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 b78b1b167c9015f553472f9933f346a74e96eef7..921770e568fc173aefbf9c676ffccfe6e10f7a09 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 43dcbb4666e547be96bf38122daeabf269c7b4c4..98cffce846d397d3a413f1e6de7df405e348ef95 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 8b63bbc24e99e0dde25a948c3c14980fccdd6aaf..1894a71e09ab425ad8ecaae970b39502a48c9d30 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 204e61f24bd44f5e3720da103fc2d1d554738d78..e0e63f8f67a552b70579eb847524f6dec772e175 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
}