我在这里遇到一种奇怪的行为.控制永远不会来自do-while循环.在调试时,我发现变量间隔的值在某些循环期间减少,而不是增加!我在这里遗漏了一些明显的东西,但无法弄明白.
static void Main(string[] args)
{
int interval = 0;
DateTime startTime = DateTime.Now;
//Task1(); //Task1 can take 4-8 seconds to complete
do
{
Thread.Sleep(100);
interval = (DateTime.Now - startTime).Milliseconds;
} while (interval < 10000); //wait for at-least ten seconds from program start, before executing task2
//Task2();
}
Run Code Online (Sandbox Code Playgroud)
Fab*_*bio 12
不要DateTime用于测量时间间隔.
使用Stopwatch专为此目的而设计的类
var clock = new Stopwatch();
clock.Start();
do
{
// do something
}
while (clock.ElapsedMilliseconds < 10000)
clock.Stop();
Run Code Online (Sandbox Code Playgroud)
注意:当然你可以DateTime用来测量时间,但是如果你需要精度小于秒,那么Stopwatch就是工作的正确工具.
并且Stopwatch具有更易读且易于使用的方法来测量时间
在您的特定情况下:"在执行task2之前等待程序启动至少十秒钟"您可以使用异步方法
var task1 = StartTask1();
await Task.Delay(10000); // next line will be executed approximately after 10 s
var task2 = StartTask2();
Run Code Online (Sandbox Code Playgroud)
你的问题是你衡量毫秒部分的TimeSpan.你必须使用TotalMilliseconds而不是Milliseconds:
do
{
Thread.Sleep(100);
interval = (DateTime.Now - startTime).TotalMilliseconds;
} while (interval < 10000); //wait for at-least ten seconds from program start, before executing task2
Run Code Online (Sandbox Code Playgroud)