複数のTimerを使ったときに、先に実行されるTimerの中で長いwaitがあると、場合によっては未来のTickが過去のTickよりも先に実行されてしまう。
vartl=newTimeline(origin);vartimerA=tl.CreateTimer(TimeSpan.FromSeconds(5));varwaitA=tl.CreateWaiter(TimeSpan.FromSeconds,10,2,2,2,2);varhistoryA=newList<DateTime>();timerA.Tick+=(sender,arg)=>{historyA.Add(tl.UtcNow);waitA();};vartimerB=tl.CreateTimer(TimeSpan.FromSeconds(5));varwaitB=tl.CreateWaiter(TimeSpan.FromSeconds,2,2,2,2,2);varhistoryB=newList<DateTime>();timerB.Tick+=(sender,arg)=>{historyB.Add(tl.UtcNow);waitB();};tl.WaitForTime(TimeSpan.FromSeconds(29));varexceptedHistory=Enumerable.Repeat(origin,5).Select((d,i)=>d+TimeSpan.FromSeconds(5*(i+1))).ToArray();Assert.That(historyA.ToArray(),Is.EqualTo(exceptedHistory));// ここで、historyBが00:05, 00:10, 00:15, 00:20, 00:25になっていてほしいが、// timerAの一回目のTickによって、00:10, 00:15のTickが先に実行されてしまい、// 00:10, 00:15, 00:05, 00:20, 00:25となってしまうAssert.That(historyB.ToArray(),Is.EqualTo(exceptedHistory));
複数のTimerを使ったときに、先に実行されるTimerの中で長いwaitがあると、場合によっては未来のTickが過去のTickよりも先に実行されてしまう。