zoukankan      html  css  js  c++  java
  • C#如何控制方法的执行时间,超时则强制退出方法执行

    转自:http://outofmemory.cn/code-snippet/1762/C-how-control-method-zhixingshijian-chaoshi-ze-force-quit-method-execution/comments1 

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

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

    如下实现的方法:

    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();
            }
        }
    
    }

    上例中使用异步执行委托的方式实现,使用WaitHandle的WaitOne方法来计算时间超时。

  • 相关阅读:
    Java多态——代码示例
    使用zabbix监控oracle的后台日志
    使用zabbix监控linux的io
    Oracle
    Oracle
    Percona XtraDB Cluster简易入门
    Oracle
    使用zabbix监控oracle数据库
    Ogg
    Mysql
  • 原文地址:https://www.cnblogs.com/mmnyjq/p/5482705.html
Copyright © 2011-2022 走看看