2024-04-12 18:26:00
Le billet de blog précédent sur les nouveautés de .NET 8.0 contient la nouvelle classe. System.TimeProvider
ainsi que celui basé sur celui-ci FakeTimeProvider
de Microsoft dans le package NuGet Microsoft.Extensions.TimeProvider.Testing traité.
Publicité
Mais tu peux en avoir un FakeTimeProvider
écrivez-vous aussi. La classe ITVisionsFakeTimeProvider
Dans la liste suivante, implémente son propre fournisseur basé sur la classe de base abstraite System.TimeProvider
. Ce ITVisionsFakeTimeProvider
renvoie toujours la même heure qui a été passée dans le constructeur et peut être utilisée avec Advance()
à introduire.
En plus de l’implémentation de Microsoft, la classe propose un laps de temps réglable. Par exemple, en spécifiant 3 comme time lapse dans le constructeur, l’attente ne prend que deux secondes au lieu de six :
ITVisionsFakeTimeProvider ftp =
new(DateTime.Parse("14.11.2023 18:00:00"), 3);
await ftp.Delay(new TimeSpan(0, 0, 6));
// oder
await Task.Delay(new TimeSpan(0, 0, 5), ftp);
Le time lapse fonctionne également sur les timers. Alors que cette minuterie sonne toutes les trois secondes
TimeProvider.System.CreateTimer
((x) => Callback(TimeProvider.System),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));
Ici, du fait du time lapse 3, le déclenchement se produit toutes les secondes :
ftp.CreateTimer((x) => Callback(ftp),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));
Voici un exemple de code utilisant cela ITVisionsFakeTimeProvider
:
///
/// Dieser FakeTimeProvider gibt immer die gleiche Zeit zurück,
/// die im Konstruktor übergeben wurde. Der Timer kann vorgestellt
/// werden mit Advance(). Für den Timer gibt es einen Zeitraffer.
///
class ITVisionsFakeTimeProvider : TimeProvider
{
private readonly DateTimeOffset _date;
int _timeLapse = 1;
public ITVisionsFakeTimeProvider(DateTimeOffset date,
int timeLapse = 1)
{
_date = date;
_timeLapse = timeLapse;
}
public override DateTimeOffset GetUtcNow()
{
return _date;
}
///
/// Zeit vorstellen
///
public void Advance(TimeSpan timeSpan)
{
_date.Add(timeSpan);
}
///
/// Timer mit Zeitraffer
///
public override ITimer CreateTimer(TimerCallback callback,
object state,
TimeSpan dueTime,
TimeSpan period)
{
return base.CreateTimer(callback, state,
new TimeSpan((long)(dueTime.Ticks / _timeLapse)),
new TimeSpan((long)(period.Ticks / _timeLapse)));
}
}
Dans le Conférence en ligne betterCode() .NET 9.0 le 19 novembre 2024 par iX et dpunkt.verlag, les experts .NET de www.IT-Visions.de présenteront la version finale de .NET 9.0 à l’aide d’exemples pratiques. Il s’agit notamment des innovations concernant le SDK .NET 9.0, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, le mappage OR avec Entity Framework Core 9.0, Windows Forms 9.0, WPF 9.0, WinUI, le développement multiplateforme avec .NET MAUI 9.0 et une perspective sur .NET 10.0.
La vente des billets a déjà commencé : avant l’annonce du programme billets pour oiseaux aveugles à prix réduit disponible.
(moi)
#Nouveau #dans #.NET #time #lapse #avec #son #propre #FakeTimeProvider
1713009500