TickerQTickerQ
GuidesDefining Jobs

[TickerFunction] Attribute

Source-generated job registration — no reflection, AOT-safe.

The source generator discovers [TickerFunction] methods at compile time and registers them automatically.

public class ReportJobs
{
    private readonly IReportService _reports;
    public ReportJobs(IReportService reports) => _reports = reports;

    [TickerFunction("daily-report")]
    public async Task DailyReport(
        TickerFunctionContext context,
        CancellationToken cancellationToken)
    {
        await _reports.GenerateAsync(cancellationToken);
    }
}

Parameters

ParameterTypeDefaultDescription
functionNamestringrequiredUnique name — must match Function on scheduled entities
cronExpressionstringnullCron schedule — auto-seeds a CronTickerEntity on startup
taskPriorityTickerTaskPriorityNormalExecution priority (see Priorities)
maxConcurrencyint0 (unlimited)Max parallel instances of this function
[TickerFunction(
    "daily-report",
    cronExpression: "0 0 9 * * *",
    taskPriority: TickerTaskPriority.High,
    maxConcurrency: 2
)]

Typed payloads

Use TickerFunctionContext<TRequest> to receive deserialized input:

[TickerFunction("send-invoice")]
public async Task SendInvoice(
    TickerFunctionContext<InvoicePayload> context,
    CancellationToken ct)
{
    var invoice = context.Request; // strongly typed
}

Payloads are serialized with TickerHelper.CreateTickerRequest<T>() when scheduling. See Configuration — Serialization.

On this page