public void Do_Timeout()
{
var sw = Stopwatch.StartNew();
const int ms = 100;
var i = 0;
var ellapsed = 0L;
var wait = new AutoResetEvent(false);
Do.Timeout(() =>
{
ellapsed = sw.ElapsedMilliseconds;
i++;
wait.Set();
}, ms);
if (wait.WaitOne(ms * 3))
{
Assert.AreEqual(1, i);
Assert.IsTrue(ellapsed > ms * .9);
} else
{
Assert.Fail("callback not executed.");
}
sw.Restart();
var killswitch = Do.Timeout(() => { wait.Set(); }, ms * 2);
killswitch.Kill();
ellapsed = sw.ElapsedMilliseconds;
Assert.IsTrue(ellapsed < ms * 2);
if (wait.WaitOne(ms * 4))
{
Assert.Fail("Unable to stop timeout.");
}
}