GuidesScheduling Jobs
TimeTicker
Schedule one-off jobs that fire at a specific time.
A TimeTicker runs once at a specific UTC time. Use it for delayed tasks, deferred processing, or any job triggered by a business event.
Schedule a job
Inject ITimeTickerManager<TimeTickerEntity> and call AddAsync:
var result = await timeTicker.AddAsync(new TimeTickerEntity
{
Function = "send-receipt",
ExecutionTime = DateTime.UtcNow.AddMinutes(5),
Request = TickerHelper.CreateTickerRequest(new ReceiptPayload { OrderId = 42 }),
});Scheduling in the past fires immediately.
Type-safe scheduling
If your handler was registered with MapTicker<T>, schedule by type instead of string:
// No payload
await timeTicker.AddAsync<CleanupJob>(
executionTime: DateTime.UtcNow.AddHours(1));
// With typed payload
await timeTicker.AddAsync<EmailJob, EmailPayload>(
DateTime.UtcNow.AddMinutes(2),
new EmailPayload { To = "[email protected]" });Handling results
Every manager operation returns TickerResult<T>:
var result = await timeTicker.AddAsync(job);
if (result.IsSucceeded)
{
var id = result.Result.Id; // the created entity
var rows = result.AffectedRows; // affected row count
}
else
{
var error = result.Exception; // what went wrong
}Update and delete
// Update execution time
job.ExecutionTime = DateTime.UtcNow.AddHours(2);
await timeTicker.UpdateAsync(job);
// Delete
await timeTicker.DeleteAsync(jobId);Batch operations
await timeTicker.AddBatchAsync(new List<TimeTickerEntity> { job1, job2, job3 });
await timeTicker.UpdateBatchAsync(jobs);
await timeTicker.DeleteBatchAsync(new List<Guid> { id1, id2 });