Nouveau dans .NET 8.0 [18]: Un time lapse avec son propre FakeTimeProvider

Nouveau dans .NET 8.0 [18]: Un time lapse avec son propre FakeTimeProvider

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)));
 }
 
}


(Image : Dmytro Vikarchuk/Shutterstock)

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)

Vers la page d’accueil



#Nouveau #dans #.NET #time #lapse #avec #son #propre #FakeTimeProvider
1713009500

Facebook
Twitter
LinkedIn
Pinterest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.