如何超时执行函数
How to timeout execution of function
我想限制函数执行的时间。如果花费的时间太长,它应该停止执行(如果需要抛出异常)。
我之所以想要它,是因为有时 lock 里面的代码会永远占用,所有想要访问 lock 语句的线程都无法访问它。
示例:
lock(objLock){
DoWork();
}
所以我想限制函数 DoWork() 的执行时间,以防止其他线程永远等待进入锁。限制其他线程等待进入的时间对我没有帮助。
您可以手动添加如下:
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;
}
使用另一个线程来完成工作,当前线程作为监视器:
lock(objLock){
Thread workerThread = new Thread(DoWork);
workerThread.Start();
TimeSpan timeout = TimeSpan.FromSeconds(30);
bool finished = workerThread.Join(timeout);
if (!finished) workerThread.Abort();
}
我想限制函数执行的时间。如果花费的时间太长,它应该停止执行(如果需要抛出异常)。 我之所以想要它,是因为有时 lock 里面的代码会永远占用,所有想要访问 lock 语句的线程都无法访问它。
示例:
lock(objLock){
DoWork();
}
所以我想限制函数 DoWork() 的执行时间,以防止其他线程永远等待进入锁。限制其他线程等待进入的时间对我没有帮助。
您可以手动添加如下:
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;
}
使用另一个线程来完成工作,当前线程作为监视器:
lock(objLock){
Thread workerThread = new Thread(DoWork);
workerThread.Start();
TimeSpan timeout = TimeSpan.FromSeconds(30);
bool finished = workerThread.Join(timeout);
if (!finished) workerThread.Abort();
}