一定時間を待つユーティリティ

以前、一定時間を待つ書き方を載せました。

https://gitan.dev/?p=135

結構使う頻度が多いので、ユーティリティ関数化しました。
なるべく処理速度が低下しないよう、気を付けて書きました。

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にすれば、ほとんど遅くならないと気づきました。

本当に遅くなってないか、今度ベンチマークでも取ってみたいと思います。

投稿日:
カテゴリー: C#

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です