如何等待一段时间或函数调用,即使系统时间发生变化,哪个时间最长?

Mic*_*eth 1 c# multithreading

我有一种情况,我不想太快地执行特定的功能.我目前有这个代码:

DoSomething();
Thread.Sleep(TimeSpan.FromMilliseconds(200));
Run Code Online (Sandbox Code Playgroud)

如何更改此代码以在函数时间或等待时间的最大值运行?

请注意:我无法使用系统时间,因为我的软件可以更改时钟时间.

因此,如果DoSomething()需要400 MS,它只会等待400 MS,但如果需要100 MS,程序将等待200 MS.

Dan*_*rth 8

也许是这样的:

var stopWatch = new StopWatch();
stopWatch.Start();
DoSomething();
stopWatch.Stop();
var diff = 200 - stopWatch.Elapsed.TotalMilliseconds;
if(diff > 0)
    Thread.Sleep(diff);
Run Code Online (Sandbox Code Playgroud)

秒表类不使用用于其测量系统时钟:

秒表通过计算基础计时器机制中的计时器滴答来测量经过的时间.如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类使用该计数器来测量经过的时间.否则,Stopwatch类使用系统计时器来测量经过的时间.

更新:
你写:

因此,如果DoSomething()需要400 MS,它只能等待400 MS,但如果它需要100 MS,程序将等待200 MS.

我首先想到的是,这不是你想要的,因为在第二种情况下,总需要300 MS的时间.但如果确实如此,那么你需要这个代码:

var stopWatch = new StopWatch();
stopWatch.Start();
DoSomething();
stopWatch.Stop();
var timeToSleep = 200;
if(stopWatch.Elapsed.TotalMilliseconds < timeToSleep)
    Thread.Sleep(timeToSleep);
Run Code Online (Sandbox Code Playgroud)


Ste*_*e B 5

IF可以使用.Net的V4,创建两个任务并等待两个任务结束.

像这样的东西:

 Task.WaitAll(
     Task.Factory.StartNew(()=>DoSomething()),
     Task.Factory.StartNew(()=>Thread.Sleep(200))
     );
Run Code Online (Sandbox Code Playgroud)