专栏首页一路走一路失去也一路拥有C# 代码中实现函数超时流程

C# 代码中实现函数超时流程

记录一下怕要用时忘记

直接上代码

        /// <summary>  
        /// 超时处理  
        /// </summary>  
        public class TimeoutChecker
        {
            long _timeout;              //超时时间  
            System.Action<Delegate> _proc;               //会超时的代码  
            System.Action<Delegate> _procHandle;         //处理超时  
            System.Action<Delegate> _timeoutHandle;      //超时后处理事件  
            System.Threading.ManualResetEvent _event = new System.Threading.ManualResetEvent(false);
            /// <summary>
            /// 超时处理
            /// </summary>
            /// <param name="proc"></param>
            /// <param name="timeoutHandle"></param>
            public TimeoutChecker(System.Action<Delegate> proc, System.Action<Delegate> timeoutHandle)
            {
                this._proc = proc;
                this._timeoutHandle = timeoutHandle;
                this._procHandle = delegate
                {
                    //计算代码执行的时间  
                    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                    sw.Start();
                    if (this._proc != null)
                        this._proc(null);
                    sw.Stop();
                    //如果执行时间小于超时时间则通知用户线程  
                    if (sw.ElapsedMilliseconds < this._timeout && this._event != null)
                    {
                        this._event.Set();
                    }
                };
            }
            public bool Wait(long timeout)
            {
                this._timeout = timeout;
                //异步执行  
                this._procHandle.BeginInvoke(null, null, null);
                //如果在规定时间内没等到通知则为 false  
                bool flag = this._event.WaitOne((int)timeout, false);
                if (!flag)
                {
                    //触发超时时间  
                    if (this._timeoutHandle != null)
                        this._timeoutHandle(null);
                }
                this.Dispose();

                return flag;
            }
            private void Dispose()
            {
                if (this._event != null)
                    this._event.Close();
                this._event = null;
                this._proc = null;
                this._procHandle = null;
                this._timeoutHandle = null;
            }
        }

实现流程

        TimeoutChecker timeout = new TimeoutChecker(
            delegate
            {
	        //要运行的函数

            },
            delegate
            {
                 //超时处理位置
                 
            });
            if (timeout.Wait(5000))
            {
                 //正常
            }

本文作者:[博主]大顺

本文链接:https://shunnet.top/qumQBj

版权声明:转载注明出处,谢谢

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Flink】Flink 数据处理流程及 scala 代码实现

    魏晓蕾
  • Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息

    程序在执行过程中 crash 是非常严重的问题,一般都应该在测试阶段排除掉这些问题,但是总会有漏网之鱼被带到 release 阶段。

    IOT物联网小镇
  • python中resample函数实现重采样和降采样代码

    我们看看上面代码,就是先给出一个1-30号的series,l然后聚合成左闭右开的5个区间[1,8),[8,15),[15,22),[22-29),[29-5(下...

    砸漏
  • c++ 常用的遍历,删除,分割等等文件处理函数代码实现

    原文链接:https://www.cnblogs.com/DOMLX/p/9622851.html

    徐飞机
  • 程序猿用 C语言实现一封 中文情书,代码很简单!【附源码】

    代码很简单,就是全部用宏定义进行替换,但是以为引用了中文,需要Unicode码的支持,能在VS2005及其以上版本编写调试 ↓↓↓

    小林C语言
  • Go 语言网络编程系列(二)—— Socket 编程入门:Dial 函数底层实现及超时处理

    在上篇教程中,我们介绍了 Go 语言中可以通过 Dial() 函数建立网络连接。实际上,Dial() 函数是对 dialTCP()、dialUDP()、dial...

    学院君
  • 推导和实现:全面解析高斯过程中的函数最优化(附代码&amp;公式)

    数据派THU
  • 神经网络中的损失函数正则化和 Dropout 并手写代码实现

    在深度神经网络中最常用的方法是Regularization和dropout。在本文中,我们将一起理解这两种方法并在python中实现它们

    deephub
  • 用C++编写函数判别一个数是否是质数,在主程序中实现输入输出

    用户7886150
  • 程序运行时间测试 - 使用libc 中 time 函数 实现秒级的运行时间检测

    c 标准库中,有time 函数,可以返回 1970年1月1日 开始到现在的秒数,我们可以调用两次的时间差来计算程序运行时间:

    xuyaowen
  • 3分钟读懂C语言函数:这些例子一看就懂!|一键删除账户教学

    最近发现,有些小伙伴对C语言的函数有些难以理解,其实呢,C语言的函数很好理解,只不过部分人在学习的时候,没有找到好的例子来类比理解而已。这篇文章会教大家如何去理...

    诸葛青云
  • Redis的数据类型——探究竟

    接上篇 为什么要用Redis,今天来聊聊具体的Redis数据类型与命令。本篇是深入理解Redis的一个重要基础,请坐稳,前方 长文预警。

    大愚
  • C和C++的区别和联系

    1980年,Bjarne Stroustrup博士开始着手创建一种模拟语言,能够具有面向对象的程序设计特色。在当时,面向对象编程还是一个比较新的理念,Strou...

    种花家的奋斗兔
  • 为什么说要搞定微服务架构,先搞定RPC框架?

    第一章聊了【“为什么要进行服务化,服务化究竟解决什么问题”】 第二章聊了【“微服务的服务粒度选型”】 今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践...

    架构师之路
  • 为什么说要搞定微服务架构,先搞定RPC框架?

    今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢?

    Java架构师必看
  • 为什么要学C语言编程?

    C 语言是由美国 AT&T 贝尔实验室的研究员 Dennis Ritchie 在 B 语言的基础上,最初作为改造 Unix 操作系统的开发语言,并伴随着 Uni...

    用户6755376
  • nginx upstream模块完整逻辑源码分析

    1.启动upstream。 2.连接上游服务器。 3.向上游发送请求。 4.接收上游响应(包头/包体)。 5.结束请求。

    xiaomei
  • Python 实战 | 一键导出微信阅读记录和笔记

    全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用户超过500万,其中19-35岁年轻用户占比超过60%,本科及以上学历用户占比高达80%,北上...

    龙哥
  • Python 实战 | 一键导出微信阅读记录和笔记

    出处:https://www.cnblogs.com/cloudbird/p/12683546.html

    Python数据科学

扫码关注云+社区

领取腾讯云代金券