Ejemplo n.º 1
0
        /// <summary>
        ///     Trigger 被触发并且完成了 Job 的执行时,Scheduler 调用这个方法。这不是说这个 Trigger 将不再触发了,而仅仅是当前 Trigger 的触发(并且紧接着的 Job 执行) 结束时。这个 Trigger
        ///     也许还要在将来触发多次的。
        ///     Called by the Quartz.IScheduler when a Quartz.ITrigger has fired, it's associated
        ///     Quartz.IJobDetail has been executed, and it's Quartz.Spi.IOperableTrigger.Triggered(Quartz.ICalendar)
        ///     method has been called.
        /// </summary>
        /// <param name="trigger">The Quartz.ITrigger that was fired.</param>
        /// <param name="context">
        ///     The Quartz.IJobExecutionContext that was passed to the
        ///     Quartz.IJob'sQuartz.IJob.Execute(Quartz.IJobExecutionContext) method.
        /// </param>
        /// <param name="triggerInstructionCode">
        ///     The result of the call on the
        ///     Quartz.ITrigger'sQuartz.Spi.IOperableTrigger.Triggered(Quartz.ICalendar) method.
        /// </param>
        /// <param name="cancellationToken">The cancellation instruction.</param>
        /// <returns></returns>
        public virtual async Task TriggerComplete(ITrigger trigger, IJobExecutionContext context,
                                                  SchedulerInstruction triggerInstructionCode,
                                                  CancellationToken cancellationToken = default)
        {
            Debug(nameof(ITriggerListener), nameof(TriggerComplete));
            var beginTicks   = context.GetJobBeginDateTimeTicks();
            var milliseconds = (long)TimeSpan.FromTicks(DateTime.Now.Ticks - beginTicks).TotalMilliseconds;

            if (milliseconds > 5 * 1000)
            {
                JobLogHelper.Warn($"{JobInfo} 耗时{milliseconds} ms ", null, nameof(TriggerComplete));
            }
            else if (milliseconds > 0)
            {
                JobLogHelper.Info($"{JobInfo} 耗时{milliseconds} ms ", nameof(TriggerComplete));
            }
            var bizState    = context.GetJobBusinessState();
            var bizStatsStr = bizState.ToString();

            if (bizState == JobBusinessStateEnum.Success)
            {
                bizStatsStr = $"<font color=#20CE43>{bizState}</font>";
            }
            if (bizState == JobBusinessStateEnum.Fail)
            {
                bizStatsStr = $"<font color=#FF0000>{bizState}</font>";
            }
            await DoNoticeAsync($"耗时 {milliseconds} ms. 任务状态为 {bizStatsStr}", context.GetTempConfig("BizContent").ToString());

            await Task.CompletedTask;
        }