@@ -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