在长时间运行的循环中处理超时
我有一个应该在给定时间内执行的方法,否则应该抛出'超时'异常。基本上它有一个长时间的运行循环。在循环的每次传球计算超时似乎昂贵:在长时间运行的循环中处理超时
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。
只能定期检查吗?例如:
if((i % 100) == 0) { /* check for timeout */ }
或调整到1000
,10000
等根据需要多快的速度发现超时。
注意:您还可以通过var timeout = startTime.AddSeconds(timeoutSeconds)预先计算超时值来提高测试性能。 '只是检查'if(DateTime。[Utc] Now> = timeout)' - 但它可能不值得。 – 2013-03-26 12:22:06
事情正在检查超时本身花费了很多时间。 – Falaque 2013-03-26 12:25:38
@Falaque因此您不太经常检查它,因为以上所述。 – 2013-03-26 12:26:04
[.net构造for while循环超时]的重复可能性(http://stackoverflow.com/questions/6629219/net-construct-for-while-loop-with-timeout) – jbabey 2013-03-26 12:14:36
为什么不使用build-in 'System.Timers.Timer'? – 2013-03-26 12:15:58
您的DateTime.Now不需要2秒钟。如果是这样,你应该检查你的电脑。 – Peter 2013-03-26 12:16:07