Skip to content

v4.10.3

Choose a tag to compare

@linkdotnet linkdotnet released this 11 Sep 18:36

Fixed

  • Re-enabling a job with a second-precision cron expression (six fields) via IRuntimeJobRegistry.EnableJob threw a CronFormatException.
  • An OperationCanceledException thrown by the job itself (e.g. an HttpClient timeout) was reported as a successful run and triggered success-dependent jobs. It is now treated as a failure.
  • A job throwing an AggregateException bypassed exception handlers, notification handlers and faulted-dependent jobs.
  • A throwing IJobExecutionProgressReporter callback could break job scheduling and execution. Callback exceptions are now logged and ignored.
  • The job registry and job schedules were not safe for concurrent changes through IRuntimeJobRegistry while jobs were being scheduled. Concurrent TryRegister calls could also schedule duplicate runs.
  • A notification handler throwing an AggregateException caused a successful job to be reported as faulted.
  • Rescheduling racing with RemoveJob could bring a removed job back, and a run could get stranded in a queue that was being removed.
  • Stopping the host did not wait for jobs that were still running after their job had been removed.
  • Triggering an instant job for a cron-scheduled job could lead to duplicate cron executions.
  • Removing a job left its queue worker running and leaked internal resources.

Changed

  • The scheduler is now signal-driven and no longer polls every job queue every 500 ms.
  • The built-in retry policies (ExponentialBackoff, FixedInterval) now wait using the registered TimeProvider.
  • RetryPolicyAttribute rejects a negative retryCount.
  • Clarified in the documentation that notification handlers are resolved from their own service scope.
  • Removed internal dead code.