麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

C#函數運行超時則終止執行(任意參數類型及參數個數通用版)

2019-11-17 02:24:59
字體:
來源:轉載
供稿:網友

C#函數運行超時則終止執行(任意參數類型及參數個數通用版)

    /// <summary>    /// 控制函數執行時間,超時返回null不繼續執行    /// 調用方法    /// FuncTimeout.EventNeedRun action = delegate(object[] param)    /// {    ///     //調用自定義函數    ///     return Test(param[0].ToString(), param[1].ToString(), (DateTime)param[2]);    /// };    /// FuncTimeout ft = new FuncTimeout(action, 2000);    /// var result = ft.doAction("1", "2", DateTime.Now);    /// </summary>    public class FuncTimeout    {        /// <summary>         /// 信號量         /// </summary>         public ManualResetEvent manu = new ManualResetEvent(false);        /// <summary>         /// 是否接受到信號         /// </summary>         public bool isGetSignal;        /// <summary>         /// 設置超時時間         /// </summary>         public int timeout;        /// <summary>         /// 定義一個委托 ,輸入參數可選,輸出object        /// </summary>         public delegate object EventNeedRun(params object[] param);        /// <summary>           /// 要調用的方法的一個委托           /// </summary>           PRivate EventNeedRun FunctionNeedRun;        /// <summary>         /// 構造函數,傳入超時的時間以及運行的方法         /// </summary>         /// <param name="_action">運行的方法 </param>         /// <param name="_timeout">超時的時間</param>         public FuncTimeout(EventNeedRun _action, int _timeout)        {            FunctionNeedRun = _action;            timeout = _timeout;        }        /// <summary>         /// 回調函數         /// </summary>         /// <param name="ar"></param>         public void MyAsyncCallback(IAsyncResult ar)        {            //isGetSignal為false,表示異步方法其實已經超出設置的時間,此時不再需要執行回調方法。             if (isGetSignal == false)            {                //放棄執行回調函數;                Thread.CurrentThread.Abort();            }        }        /// <summary>        /// 調用函數         /// </summary>        /// <param name="input">可選個數的輸入參數</param>        /// <returns></returns>        public object doAction(params object[] input)        {            EventNeedRun WhatTodo = CombineActionAndManuset;            //通過BeginInvoke方法,在線程池上異步的執行方法。             var r = WhatTodo.BeginInvoke(input, MyAsyncCallback, null);            //設置阻塞,如果上述的BeginInvoke方法在timeout之前運行完畢,則manu會收到信號。此時isGetSignal為true。             //如果timeout時間內,還未收到信號,即異步方法還未運行完畢,則isGetSignal為false。             isGetSignal = manu.WaitOne(timeout);            if (isGetSignal == true)            {                return WhatTodo.EndInvoke(r);            }            else            {                return null;            }        }        /// <summary>        /// 把要傳進來的方法,和 manu.Set()的方法合并到一個方法體。         /// action方法運行完畢后,設置信號量,以取消阻塞。         /// </summary>        /// <param name="input">輸入參數</param>        /// <returns></returns>        public object CombineActionAndManuset(params object[] input)        {            var output = FunctionNeedRun(input);            manu.Set();            return output;        }    }

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色婷婷a v| 精品在线免费播放 | 激情97 | 久久国产精品久久久久久电车 | 欧美日韩国产一区二区三区在线观看 | 亚洲午夜国产 | 欧美一级电影网站 | 国产精品国产成人国产三级 | 宅男噜噜噜66国产在线观看 | 牛牛热这里只有精品 | 中文区永久区 | 九九热免费视频在线观看 | 免费国产在线精品 | 国产一区二区国产 | 亚洲国产精品久久久久久久久久 | 亚洲精品免费播放 | 成人观看网站 | 亚洲精品成人18久久久久 | 欧美一级毛片免费观看 | 国产午夜精品在线 | 免费看日产一区二区三区 | 孕妇体内谢精满日本电影 | 毛片免费观看完整版 | 中文在线观看www | 免费在线中文字幕 | 欧美日韩亚洲精品一区二区三区 | 国产一级中文字幕 | 日韩黄色精品视频 | 免费久久久| 成人精品久久久 | 国产免费观看电影网站 | 精品一区二区三区在线观看视频 | 在线免费观看毛片视频 | 国产大片在线观看 | 欧美人xx | 经典三级在线视频 | 高清国产午夜精品久久久久久 | hdhdhd79xxxxх | 欧美三级欧美成人高清www | 欧美成人激情在线 | 成人免费福利网站 |