FluxFlow.Components.Timers 3.1.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package FluxFlow.Components.Timers --version 3.1.2
                    
NuGet\Install-Package FluxFlow.Components.Timers -Version 3.1.2
                    
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.1.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FluxFlow.Components.Timers" Version="3.1.2" />
                    
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.1.2
                    
#r "nuget: FluxFlow.Components.Timers, 3.1.2"
                    
#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.1.2
                    
#: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.1.2
                    
Install as a Cake Addin
#tool nuget:?package=FluxFlow.Components.Timers&version=3.1.2
                    
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.

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 host-owned keyed TimeProvider resource.

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 or own clock lifetime. Invalid timer settings fail during composition build and surface as factory diagnostics when build failures are configured as diagnostics.

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 125 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

Adds the shared FluxFlow package icon. No source, API, or dependency changes.