FluxFlow.Components.Timers
3.0.0
See the version list below for details.
dotnet add package FluxFlow.Components.Timers --version 3.0.0
NuGet\Install-Package FluxFlow.Components.Timers -Version 3.0.0
<PackageReference Include="FluxFlow.Components.Timers" Version="3.0.0" />
<PackageVersion Include="FluxFlow.Components.Timers" Version="3.0.0" />
<PackageReference Include="FluxFlow.Components.Timers" />
paket add FluxFlow.Components.Timers --version 3.0.0
#r "nuget: FluxFlow.Components.Timers, 3.0.0"
#:package FluxFlow.Components.Timers@3.0.0
#addin nuget:?package=FluxFlow.Components.Timers&version=3.0.0
#tool nuget:?package=FluxFlow.Components.Timers&version=3.0.0
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.
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.
| 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.0.0)
-
net8.0
- FluxFlow.Nodes (>= 1.0.0)
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 | 126 | 6/19/2026 |
| 2.0.0 | 151 | 6/18/2026 |
| 1.2.1 | 130 | 6/15/2026 |
| 1.2.0 | 431 | 6/12/2026 |
| 1.1.0 | 124 | 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 |
Rebuilt on the FluxFlow.Nodes kit: timer.interval and timer.schedule are FlowSource<T> sources (started via StartAsync, ticks minted as FlowMessage envelopes), and timer.delay/throttle/debounce are FlowNode<TInput, TInput> transforms that preserve the message correlation id and time off the injected TimeProvider. The engine factories, module, registration extensions, design-metadata provider, the definition-options reader, and the string-to-Type resolution layer are removed; each node takes its settings record and TimeProvider directly and depends only on FluxFlow.Nodes (runs without the engine).