none
結果の出力に揺らぎが出る RRS feed

  • 質問

  • 下の2つのタイマー(System.Timers.Timer()、2つともIntervalは同値)を使い結果を出力すると、

    i = 0
    n = 0
    n = 1
    i = 1
    n = 2
    i = 2
    i = 3
    n = 3

    と出力に揺らぎが出てしまいます。これを、

    i = 0
    n = 0
    i = 1
    n = 1
    i = 2
    n = 2
    i = 3
    n = 3

    と必ずiの値を先に出力するにはどのようにすればよいのでしょうか。
    ご教授いただければ幸いです。
    よろしくお願いいたします。
    下にコードを記します。

    private async void OnElapsed_TimersTimer5(object sender, ElapsedEventArgs e)
            {
                Console.WriteLine("i = " + i);
                i++;
    }

    private async void OnElapsed_TimersTimer6(object sender, ElapsedEventArgs e)
            {
                Console.WriteLine("n = " + i);
                n++;
    }

    2017年8月13日 0:56

回答

  • 一般的に、タイマーは指定した時間以上の間隔で呼び出されることは保証されていますが、それ以上のことは保証していないため、希望以上に長くなることは当然あり得ます。

    開発者としてはこれを前提にタイマーを操作するようプログラムを組む必要があります。

    2017年8月13日 1:48