FluxFlow.Components.Timers
3.1.1
See the version list below for details.
dotnet add package FluxFlow.Components.Timers --version 3.1.1
NuGet\Install-Package FluxFlow.Components.Timers -Version 3.1.1
<PackageReference Include="FluxFlow.Components.Timers" Version="3.1.1" />
<PackageVersion Include="FluxFlow.Components.Timers" Version="3.1.1" />
<PackageReference Include="FluxFlow.Components.Timers" />
paket add FluxFlow.Components.Timers --version 3.1.1
#r "nuget: FluxFlow.Components.Timers, 3.1.1"
#:package FluxFlow.Components.Timers@3.1.1
#addin nuget:?package=FluxFlow.Components.Timers&version=3.1.1
#tool nuget:?package=FluxFlow.Components.Timers&version=3.1.1
FluxFlow.Components.Timers
Standalone timer nodes for FluxFlow, built on the FluxFlow.Nodes
kit. Every node is a self-contained TPL Dataflow processor: new it, LinkTo
the next node, and run it — no engine, registry, or runtime required. All timing
is driven by an injected TimeProvider, so tests stay deterministic with a
FakeTimeProvider.
Nodes
| Node | Kind | Shape | Purpose |
|---|---|---|---|
TimerIntervalNode |
source | Output |
Emits FlowMessage<TimerTick> on a fixed interval. |
TimerScheduleNode |
source | Output |
Emits FlowMessage<ScheduleTick> from a cron expression. |
TimerDelayNode<T> |
transform | Input → Output |
Re-emits each input after a delay, unchanged. |
TimerThrottleNode<T> |
transform | Input → Output |
Rate-limits inputs to one per interval, unchanged. |
TimerDebounceNode<T> |
transform | Input → Output |
Emits the latest input after a quiet period. |
Sources start with StartAsync() and produce until they hit MaxTicks (source
complete) or are stopped via Complete()/DisposeAsync(). Every emitted tick is
a FlowMessage<T> envelope with a fresh CorrelationId. The transforms preserve
the correlation id of each input message they re-emit. Errors surface on the
Errors port and diagnostics on the Events port. The package emits neutral
tick contracts only — hosts decide whether ticks drive polling, health checks,
metrics, file work, message publishing, or other activity.
For interval and schedule sources, BoundedCapacity configures source output
capacity. Tick loops await source output acceptance. Output remains
broadcast/latest-wins; use a dedicated durable buffer if a workflow edge must
guarantee no loss. Delay, throttle, and debounce keep using BoundedCapacity
as their bounded input capacity.
Construction validates settings before the node pipeline is created. Invalid interval, delay, throttle, debounce, and capacity settings fail fast with timer-specific construction errors.
Interval
await using var node = new TimerIntervalNode(new TimerIntervalSettings
{
Name = "poll",
Interval = TimeSpan.FromSeconds(1),
InitialDelay = TimeSpan.FromMilliseconds(250),
EmitImmediately = false,
MaxTicks = 10
});
node.Output.LinkTo(downstream);
await node.StartAsync();
TimerIntervalNode emits TimerTick values with a sequence number, timestamp,
due time, elapsed time, interval, and drift. Set EmitImmediately = true to emit
the first tick as soon as the node starts.
Schedule
await using var node = new TimerScheduleNode(new TimerScheduleSettings
{
Name = "weekday-noon",
Cron = "0 12 ? * MON-FRI",
TimeZone = TimeZoneInfo.Utc,
MaxTicks = 10
});
node.Output.LinkTo(downstream);
await node.StartAsync();
TimerScheduleNode emits ScheduleTick values. Cron expressions use five fields,
or six when seconds are needed. The expression is compiled and validated in the
constructor.
Delay / Throttle / Debounce
await using var delay = new TimerDelayNode<MyMessage>(
new TimerDelaySettings { Delay = TimeSpan.FromMilliseconds(250) });
await using var throttle = new TimerThrottleNode<MyMessage>(
new TimerThrottleSettings { Interval = TimeSpan.FromMilliseconds(100), EmitFirstImmediately = true });
await using var debounce = new TimerDebounceNode<MyMessage>(
new TimerDebounceSettings { QuietPeriod = TimeSpan.FromMilliseconds(250) });
await delay.Input.SendAsync(FlowMessage.Create(message));
TimerDelayNode<T>preserves input order and re-emits each item after the configured delay.TimerThrottleNode<T>preserves input order and re-emits no more than once per interval, queuing items through bounded intake instead of dropping them.TimerDebounceNode<T>keeps the latest input and emits it after no new input arrives for the quiet period; a pending item is flushed when the input completes.
Deterministic time
Pass a TimeProvider to any node's constructor (it defaults to
TimeProvider.System). Tests can supply a
FakeTimeProvider
and advance it to fire interval ticks, schedule occurrences, delays, throttle
windows, and debounce quiet periods without real-time waits.
Composition
The optional FluxFlow.Components.Timers.Composition package registers timer
factories for FluxFlow.Composition. It binds the existing timer settings from
node configuration and resolves an optional keyed TimeProvider resource owned
by the host.
services
.AddFluxFlowComposition(configuration)
.RegisterNodes(registry => registry
.RegisterTimerInterval()
.RegisterTimerSchedule()
.RegisterTimerDelay<MyMessage>()
.RegisterTimerThrottle<MyMessage>()
.RegisterTimerDebounce<MyMessage>());
Use custom node type strings for multiple transform input shapes, for example
timer.delay.order and timer.debounce.http. Schedule composition uses the
existing TimerScheduleSettings model; this adapter does not add time zone id
conversion.
Invalid timer settings fail during composition build and surface as factory
diagnostics when build failures are configured as diagnostics.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FluxFlow.Nodes (>= 1.1.2)
-
net8.0
- FluxFlow.Nodes (>= 1.1.2)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on FluxFlow.Components.Timers:
| Package | Downloads |
|---|---|
|
FluxFlow.Components.Timers.Composition
Optional FluxFlow.Composition registrations and Designer metadata for typed timer sources and transforms over host-owned keyed clocks. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 7.0.0-rc.1 | 83 | 9/5/2026 |
| 6.0.0 | 183 | 8/3/2026 |
| 3.1.2 | 139 | 7/3/2026 |
| 3.1.1 | 179 | 7/2/2026 |
| 3.0.0 | 125 | 6/19/2026 |
| 2.0.0 | 150 | 6/18/2026 |
| 1.2.1 | 130 | 6/15/2026 |
| 1.2.0 | 431 | 6/12/2026 |
| 1.1.0 | 123 | 6/5/2026 |
| 1.0.0 | 135 | 6/4/2026 |
| 0.5.0-alpha.1 | 255 | 6/2/2026 |
| 0.4.2-alpha.1 | 87 | 6/2/2026 |
| 0.4.1-alpha.1 | 131 | 6/1/2026 |
| 0.4.0-alpha.1 | 67 | 6/1/2026 |
| 0.3.0-alpha.1 | 79 | 6/1/2026 |
| 0.2.0-alpha.1 | 74 | 6/1/2026 |
| 0.1.0-alpha.1 | 75 | 6/1/2026 |
Aligns timer transform constructor option validation with standalone node conventions: timer.delay, timer.throttle, and timer.debounce now validate duration and boundedCapacity settings before their node pipelines are created. Runtime timer behavior is unchanged.