如何超时执行功能

时间:2019-05-24 10:55:09

标签: c# timeout locking

我想限制函数应该执行多长时间。如果花费的时间太长,则应停止执行(如果需要,抛出异常)。 我之所以想要它,是因为有时锁中的代码要花很长时间,并且所有想要访问lock语句的线程都无法访问它。

示例:

lock(objLock){
   DoWork();
}

所以我想限制函数DoWork()的执行时间,以防止其他线程永远等待进入锁。限制其他线程应等待输入多长时间没有帮助。

2 个答案:

答案 0 :(得分:3)

使用另一个线程来完成工作,并使用当前线程作为监视器:

lock(objLock){
    Thread workerThread = new Thread(DoWork);
    workerThread.Start();

    TimeSpan timeout = TimeSpan.FromSeconds(30);
    bool finished = workerThread.Join(timeout);
    if (!finished) workerThread.Abort();
}

答案 1 :(得分:0)

您可以手动添加,如下所示:

null

或者您可以在循环中检查时间

DateTime dt = DateTime.Now;
while(Datetime.Now - dt > Atimespan)
{Do some work}