在长时间运行的循环中处理超时

时间:2013-03-26 12:12:03

标签: c#

我有一个应该在给定时间内执行的方法,或者它应该抛出'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。

1 个答案:

答案 0 :(得分:4)

只定期检查?例如:

if((i % 100) == 0) { /* check for timeout */ }

或者根据需要注意超时的速度调整为100010000等。