我有一个应该在给定时间内执行的方法,或者它应该抛出'Timeout'异常。基本上它有一个长时间循环。在每次循环中计算超时似乎很昂贵:
private void DoSomethingGood(int timeoutSeconds)
{
var startTime=DateTime.Now;
int count=100000000; //some big number
for(int i=0;i<count;i++)
{
//code to to take care of timeout.
var ellapsedSeconds =(DateTime.Now-startTime).TotalSeconds;
if(ellapsedSeconds>=timeoutSeconds)
{
throw new TimeoutException("Timeout");
}
/*some more code here*/
}
}
(在没有其他代码的情况下调用上面的方法,本身花费的时间超过2秒,主要是由于DateTime.Now语句)
有人可以建议更好的方法吗?
我很好用+ -few-milliseconds。
答案 0 :(得分:4)
只定期检查?例如:
if((i % 100) == 0) { /* check for timeout */ }
或者根据需要注意超时的速度调整为1000
,10000
等。