长沙震烨科技有限公司 专注研发高校招生考试系统

C#如何控制方法的执行时间,超时则强制退出方法执行

2016/6/23 23:45:45 人评论 次浏览 分类:C#学习中心

有时候我们需要控制方法的执行时间,如果超时则强制退出。

要控制执行时间,我们必须使用异步模式,在另外一个线程中执行方法,如果超时,则抛出异常终止线程执行。

如下实现的方法:

class Program
{ static void Main(string[] args)
    { //try the five second method with a 6 second timeout CallWithTimeout(FiveSecondMethod, 6000); //try the five second method with a 4 second timeout //this will throw a timeout exception CallWithTimeout(FiveSecondMethod, 4000);
    } static void FiveSecondMethod()
    {
        Thread.Sleep(5000);
    } static void CallWithTimeout(Action action, int timeoutMilliseconds)
    {
        Thread threadToKill = null;
        Action wrappedAction = () => {
            threadToKill = Thread.CurrentThread;
            action();
        };

        IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
        {
            wrappedAction.EndInvoke(result);
        } else {
            threadToKill.Abort(); throw new TimeoutException();
        }
    }

}

附件下载