如何超时执行函数



我希望限制函数应执行多长时间。如果花费太长,则应停止执行(如果需要,例外(。我之所以想要它,是因为有时内部锁定的代码需要永远存在,并且所有想要访问锁定语句的线程无法访问它。

示例:

lock(objLock){
   DoWork();
}

因此,我想限制函数dowork((执行时间,以防止其他线程永远等待进入锁定。它无助于我限制其他线程应等待的时间。

使用另一个线程进行工作,当前线程为监视器:

lock(objLock){
    Thread workerThread = new Thread(DoWork);
    workerThread.Start();
    TimeSpan timeout = TimeSpan.FromSeconds(30);
    bool finished = workerThread.Join(timeout);
    if (!finished) workerThread.Abort();
}

您可以手动添加如下:

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

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

DateTime dt = DateTime.Now;
lock(objLock){
   DoWork();
   if(DateTime.Now - dt > SomeTimeSpan) break;
}

相关内容

  • 没有找到相关文章

最新更新