Releases: egil/TimeProviderExtensions
v1.0.0
v1.0.0-rc.3
Strong named the assembly. By @quinmars.
v1.0.0-rc.2
-
Added
ActiveTimers
property toManualTimeProvider
. The property will display the number of currently active timers that have a callback scheduled to be called in the future. -
Allow
ManualTimeProvider.Start
to be set using property initializers. -
Made the timer type created by
ManualTimeProvider
, theManualTimer
type, public, and introduced a protected methodCreateManualTimer
onManualTimeProvider
. This enables advanced scenarios where a customManualTimer
is needed.A custom implementation of
ManualTimer
can override theChange
method and add custom behavior to it.Overriding
CreateManualTimer
makes it possible to intercept aTimerCallback
and perform actions before and after the timer callback has been invoked. -
Replace the
AutoAdvanceAmount
property with theAutoAdvanceBehavior
property onManualTimeProvider
, and introduce theAutoAdvanceBehavior
type. To automatically advance the time whenGetUtcNow()
orGetLocalNow()
is called, setAutoAdvanceBehavior.UtcNowAdvanceAmount
to aTimeSpan
larger than zero. -
Enable auto advance feature for
GetTimestamp()
andGetElapsedTime(long)
. To automatically advance the time whenGetTimestamp()
orGetElapsedTime(long)
is called, setAutoAdvanceBehavior.TimestampAdvanceAmount
to aTimeSpan
larger than zero. -
ManualTimer
now exposes its current configuration.DueTime
,Period
,IsActive
,CallbackTime
, andCallbackInvokeCount
are now publicly visible. -
Enable auto-advance feature for timers. This enables automatically calling timers callback a specified number of times, by setting the
AutoAdvanceBehavior.TimerAutoTriggerCount
property to a number larger than zero.
Full Changelog: v1.0.0-rc.1...v1.0.0-rc.2
v1.0.0-rc.1
- Updated Microsoft.Bcl.TimeProvider package dependency to rc.1 version.
v1.0.0-preview.7
- Added support for netstandard2.0, as this is supported by the back-port package https://www.nuget.org/packages/Microsoft.Bcl.TimeProvider.
v1.0.0-preview.6
- Added
Jump(TimeSpan)
andJump(DateTimeOffset)
methods that will jump time to the specified place. Any timer callbacks between the start and end of the jump will be invoked the expected number of times, but the date/time returned fromGetUtcNow()
andGetTimestamp()
will always be the jump time. This differs from howAdvance
andSetUtcNow
works. See the readme for a detailed description.
v1.0.0-preview.5
Aligned the public API surface of ManualTimeProvider
with Microsoft.Extensions.Time.Testing.FakeTimeProvider
. This means:
- The
StartTime
property is now calledStart
. - The
ForwardTime
method has been removed (useAdvance
instead). - The
AutoAdvanceAmount
property has been introduced, which will advance time with the specified amount every timeGetUtcNow()
is called. It defaults toTimeSpan.Zero
, which disables auto-advancing.
v1.0.0-preview.4
- Added 'StartTime' to
ManualTestProvider
, which represents the initial date/time when theManualtTimeProvider
was initialized.
v1.0.0-preview.3
- Changed
ManualTestProvider
sets the local time zone to UTC by default, provides method for overriding during testing. - Changed
ManualTestProvider.ToString()
method to return current date time. - Fixed
ITimer
returned byManualTestProvider
such that timers created with a due time equal to zero will fire the timer callback immediately.
v1.0.0-preview.2
This release adds a dependency on Microsoft.Bcl.TimeProvider and utilizes the types built-in to that to do much of the work.
Compared to the previous version (TimeScheduler) of this library, this release includes the following changes:
-
Removed
CancelAfter
extension methods. Instead, create aCancellationTokenSource
via the methodTimeProvider.CreateCancellationTokenSource(TimeSpan delay)
or in .NET 8, usingnew CancellationTokenSource(TimeSpan delay, TimeProvider timeProvider)
.NOTE: If running on .NET versions earlier than .NET 8.0, there is a constraint when invoking CancellationTokenSource.CancelAfter(TimeSpan) on the resultant object. This action will not terminate the initial timer indicated by
delay
. However, this restriction does not apply on .NET 8.0 and later versions.
Known issues and limitations:
- When using the
ManualTimeProvider
during testing to forward time, be aware of this issue: dotnet/runtime#85326. - If running on .NET versions earlier than .NET 8.0, there is a constraint when invoking
CancellationTokenSource.CancelAfter(TimeSpan)
on theCancellationTokenSource
object returned byCreateCancellationTokenSource(TimeSpan delay)
. This action will not terminate the initial timer indicated by thedelay
argument initially passed theCreateCancellationTokenSource
method. However, this restriction does not apply on .NET 8.0 and later versions. - To enable controlling
PeriodicTimer
viaTimeProvider
in versions of .NET earlier than .NET 8.0, theTimeProvider.CreatePeriodicTimer
returns aPeriodicTimerWrapper
object instead of aPeriodicTimer
object. ThePeriodicTimerWrapper
type is just a lightweight wrapper around the originalSystem.Threading.PeriodicTimer
and will behave identically to it.