FluxFlow.Components.Timers 3.0.0

There is a newer version of this package available.
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
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="FluxFlow.Components.Timers" Version="3.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FluxFlow.Components.Timers" Version="3.0.0" />
                    
Directory.Packages.props
<PackageReference Include="FluxFlow.Components.Timers" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add FluxFlow.Components.Timers --version 3.0.0
                    
#r "nuget: FluxFlow.Components.Timers, 3.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package FluxFlow.Components.Timers@3.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=FluxFlow.Components.Timers&version=3.0.0
                    
Install as a Cake Addin
#tool nuget:?package=FluxFlow.Components.Timers&version=3.0.0
                    
Install as a Cake Tool

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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).