以前、一定時間を待つ書き方を載せました。
結構使う頻度が多いので、ユーティリティ関数化しました。
なるべく処理速度が低下しないよう、気を付けて書きました。
public struct WaitUtil
{
public DateTime runNextDateTime { get; set; }
private TimeSpan _waitTimeSpan;
public WaitUtil(TimeSpan waitTimeSpan) : this(DateTime.Now, waitTimeSpan) { }
public WaitUtil(DateTime beginDateTime, TimeSpan waitTimeSpan)
{
runNextDateTime = beginDateTime + waitTimeSpan;
_waitTimeSpan = waitTimeSpan;
}
public Task WaitNext()
{
var waitTime = runNextDateTime - DateTime.Now;
runNextDateTime += _waitTimeSpan;
if (waitTime <= TimeSpan.Zero) { return Task.CompletedTask; }
return Task.Delay(waitTime);
}
}
classにして、処理が遅くなるのが気になっていたのですが、structにすれば、ほとんど遅くならないと気づきました。
本当に遅くなってないか、今度ベンチマークでも取ってみたいと思います。