Wraps .NET's TimeProvider abstraction (System.TimeProvider, introduced .NET 8) and FakeTimeProvider from Microsoft.Extensions.TimeProvider.Testing: SetUtcNow, Advance, AutoAdvanceAmount, CreateTimer, Delay, and the pre-.NET-8 ISystemClock migration path. Use when testing C# or F# code that reads the current time, uses timers, or awaits Task.Delay.
75
94%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Before TimeProvider, the Microsoft.Extensions stack used
ISystemClock (namespace Microsoft.Extensions.Internal, assembly
Microsoft.Extensions.Caching.Abstractions.dll). Per
learn.microsoft.com/dotnet/api/microsoft.extensions.internal.isystemclock:
"Abstracts the system clock to facilitate testing." It exposed a
single property, UtcNow, and carried the notice "This API supports
the .NET infrastructure and is not intended to be used directly from
your code."
// Legacy pattern (pre-.NET 8)
public interface ISystemClock
{
DateTimeOffset UtcNow { get; }
}
// Test implementation
public class FakeSystemClock : ISystemClock
{
public DateTimeOffset UtcNow { get; set; }
}Migration path: replace ISystemClock injection with TimeProvider,
and replace fake implementations with FakeTimeProvider. The
ISystemClock approach covers only UtcNow; TimeProvider also
covers high-frequency timestamps and timers, making it the complete
replacement.