Skip to content

Commit 889bde5

Browse files
committed
[增加]1. 增加计时器的过去次数的补偿处理
#30
1 parent 39fbb62 commit 889bde5

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

GameFrameX.Core/Timer/QuartzTimer.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,19 +138,34 @@ public static void Resume(IEnumerable<long> set)
138138
/// <param name="interval">每次执行之间的间隔时间</param>
139139
/// <param name="eventArgs">传递给定时器处理器的自定义参数</param>
140140
/// <param name="repeatCount">循环次数,设置为-1表示无限循环执行</param>
141+
/// <param name="isMissFire">是否允许错过执行</param>
141142
/// <returns>生成的定时任务ID,可用于后续管理该任务</returns>
142-
public static long Schedule<T>(long actorId, TimeSpan delay, TimeSpan interval, GameEventArgs eventArgs = null, int repeatCount = -1) where T : ITimerHandler
143+
public static long Schedule<T>(long actorId, TimeSpan delay, TimeSpan interval, GameEventArgs eventArgs = null, int repeatCount = -1, bool isMissFire = true) where T : ITimerHandler
143144
{
144145
var nextId = NextId();
145146
var firstTimeOffset = DateTimeOffset.Now.Add(delay);
146147
TriggerBuilder builder;
147148
if (repeatCount < 0)
148149
{
149-
builder = TriggerBuilder.Create().StartAt(firstTimeOffset).WithSimpleSchedule(x => x.WithInterval(interval).RepeatForever());
150+
builder = TriggerBuilder.Create().StartAt(firstTimeOffset).WithSimpleSchedule(x =>
151+
{
152+
var scheduleBuilder = x.WithInterval(interval).RepeatForever();
153+
if (isMissFire)
154+
{
155+
scheduleBuilder.WithMisfireHandlingInstructionIgnoreMisfires();
156+
}
157+
});
150158
}
151159
else
152160
{
153-
builder = TriggerBuilder.Create().StartAt(firstTimeOffset).WithSimpleSchedule(x => x.WithInterval(interval).WithRepeatCount(repeatCount));
161+
builder = TriggerBuilder.Create().StartAt(firstTimeOffset).WithSimpleSchedule(x =>
162+
{
163+
var scheduleBuilder = x.WithInterval(interval).WithRepeatCount(repeatCount);
164+
if (isMissFire)
165+
{
166+
scheduleBuilder.WithMisfireHandlingInstructionIgnoreMisfires();
167+
}
168+
});
154169
}
155170

156171
_scheduler.ScheduleJob(GetJobDetail<T>(nextId, actorId, eventArgs), builder.Build());
@@ -169,7 +184,7 @@ public static long Delay<T>(long actorId, TimeSpan delay, GameEventArgs eventArg
169184
{
170185
var nextId = NextId();
171186
var firstTimeOffset = DateTimeOffset.Now.Add(delay);
172-
var trigger = TriggerBuilder.Create().StartAt(firstTimeOffset).Build();
187+
var trigger = TriggerBuilder.Create().StartAt(firstTimeOffset).WithSimpleSchedule(x => x.WithMisfireHandlingInstructionNextWithRemainingCount()).Build();
173188
_scheduler.ScheduleJob(GetJobDetail<T>(nextId, actorId, eventArgs), trigger);
174189
return nextId;
175190
}

0 commit comments

Comments
 (0)