.NET 8.0'da yenilikler için önceki blog yazısı yeni tanıtıldı System.TimeProvider ve buna dayanan FakeTimeProvider Microsoft tarafından NUGET Microsoft.Extensi.Timeprovider.Testing Paketi.
Ama bir tane yapabilirsin FakeTimeProvider Kendini de yaz. Sınıf ITVisionsFakeTimeProvider Soyut temel sınıfa dayalı olarak sağlayıcının aşağıdaki listesinde uygulandı System.TimeProvider. Bu ITVisionsFakeTimeProvider Her zaman aynı zamanda üreticiye teslim edildiği ve Advance() sunulacak.
Microsoft'un uygulanmasına ek olarak, sınıf ayarlanabilir bir süre sunar. Örneğin, bekleme, üreticide 3'ü belirleyerek altı saniye yerine sadece iki tane gerektirir:
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);
Zaman -laPse de zamanlayıcıları etkiler. Bu zamanlayıcı sırasında her üç saniyede bir tetik
TimeProvider.System.CreateTimer
((x) => Callback(TimeProvider.System),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));
Zaman 3 nedeniyle, her saniyede etkinleştirilir:
ftp.CreateTimer((x) => Callback(ftp),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));
İşte bir kod örneği 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)
BetterCode Online Konferansı () .NET 9.0 of 19 Kasım 2024 IX ve dpunkt.verlag. Bu.
Bilet satışları çoktan başladı: Programın duyurulmasından önce indirimli kör kuşlar mevcuttur.
(RME)
Ama bir tane yapabilirsin FakeTimeProvider Kendini de yaz. Sınıf ITVisionsFakeTimeProvider Soyut temel sınıfa dayalı olarak sağlayıcının aşağıdaki listesinde uygulandı System.TimeProvider. Bu ITVisionsFakeTimeProvider Her zaman aynı zamanda üreticiye teslim edildiği ve Advance() sunulacak.
Microsoft'un uygulanmasına ek olarak, sınıf ayarlanabilir bir süre sunar. Örneğin, bekleme, üreticide 3'ü belirleyerek altı saniye yerine sadece iki tane gerektirir:
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);
Zaman -laPse de zamanlayıcıları etkiler. Bu zamanlayıcı sırasında her üç saniyede bir tetik
TimeProvider.System.CreateTimer
((x) => Callback(TimeProvider.System),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));
Zaman 3 nedeniyle, her saniyede etkinleştirilir:
ftp.CreateTimer((x) => Callback(ftp),
null,
new TimeSpan(0, 0, 3),
new TimeSpan(0, 0, 3));
İşte bir kod örneği 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)
BetterCode Online Konferansı () .NET 9.0 of 19 Kasım 2024 IX ve dpunkt.verlag. Bu.
Bilet satışları çoktan başladı: Programın duyurulmasından önce indirimli kör kuşlar mevcuttur.
(RME)