.NET 8.0'daki yenilikler [18]: kendi FakeTimeProvider'ınızla hızlandırılmış bir çekim

Saberie

Active member
.NET 8.0'daki yeniliklerle ilgili önceki blog yazısında yeni sınıf tanıtılmıştı System.TimeProvider ve buna dayanan FakeTimeProvider Microsoft.Extensions.TimeProvider.Testing NuGet paketinde Microsoft'tan.

Duyuru



Ama bir tane alabilirsin FakeTimeProvider sen de yaz. Sınıf ITVisionsFakeTimeProvider Aşağıdaki listede sağlayıcınızı soyut temel sınıfa göre uygulayın System.TimeProvider. Bu ITVisionsFakeTimeProvider Her zaman yapıcıda geçen sürenin aynısını döndürür ve şununla kullanılabilir: Advance() tanıtım yapmak.

Microsoft'un uygulamasına ek olarak sınıf, ayarlanabilir bir zaman çerçevesi sunar. Örneğin, yapıcıda zaman aşımı olarak 3'ü belirtmek, beklemenin altı yerine yalnızca iki saniye sürmesini sağlar:


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


Hızlandırılmış çekim aynı zamanda zamanlayıcılarla da çalışır. Bu zamanlayıcı her üç saniyede bir etkinleşirken


TimeProvider.System.CreateTimer
((x) => Callback(TimeProvider.System),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));


Burada zaman aşımı 3 nedeniyle aktivasyon her saniye gerçekleşir:


ftp.CreateTimer((x) => Callback(ftp),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));


İşte onu kullanan örnek bir kod ITVisionsFakeTimeProvider:


/// <summary>
/// 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.
/// </summary>
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;
}

/// <summary>
/// Zeit vorstellen
/// </summary>
public void Advance(TimeSpan timeSpan)
{
_date.Add(timeSpan);
}

/// <summary>
/// Timer mit Zeitraffer
/// </summary>
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)));
}

}







(Resim: Dmytro Vikarchuk/Shutterstock)


iX ve dpunkt.verlag tarafından 19 Kasım 2024'te düzenlenecek BetterCode() .NET 9.0 çevrimiçi konferansında, www.IT-Visions.de adresindeki .NET uzmanları pratik örnekler kullanarak .NET 9.0'ın son sürümünü sunacaklar. Bunlar arasında .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Entity Framework Core 9.0 ile OR eşlemesi, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0 ile platformlar arası geliştirme ve bir perspektif yer alıyor. .NET 10.0'da.

Bilet satışları başladı bile; indirimli kör kuş biletleri program duyurusu öncesinde satışa sunuldu.








(kendim)



Haberin Sonu
 
Üst