C# 指定方法的超时时间,超出时限后,直接抛出异常

        public static void Invoke(Action method, int milliseconds)
        {
            Thread thdToKill = null;

            Action invokemethod = new Action(() =>
            {
                thdToKill = Thread.CurrentThread;
                method();
            });

            IAsyncResult ar = invokemethod.BeginInvoke(null, null);
            if (!ar.AsyncWaitHandle.WaitOne(milliseconds))
            {
                thdToKill.Abort();
                throw new Exception(string.Format("操作失败,原因:超时 {0}毫秒", milliseconds));
            }

            invokemethod.EndInvoke(ar);
        }
时间: 2024-10-03 23:00:26

C# 指定方法的超时时间,超出时限后,直接抛出异常的相关文章

设置调用方法的超时时间

在工作中,遇到这样一个需求,我要做一个业务,要验证一下现有的数据是否正确,但这个验证又不是必须的,只是说如果这里验证不通过,后面流程就可以不走了,但是如果这里没有验证到,后面也会有验证.也就是说不影响主流程,算得上是一个优化吧.比如我要查询一个东西,但是这个时间不能超过1秒. 在网上查了一下,基本上都是异步执行,有两个线程来做.我查到有两种方法. 第一种 独立成一个类 代码如下: (1).FuncTimeOut类 /// <summary> /// 超时设置类 /// </summary

C# 给TcpClient的Connect方法设置超时时间

var client = new TcpClient(); var result = client.BeginConnect("remotehost", this.Port, null, null); var success = result.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(1)); if (!success) { throw new Exception("Failed to connect."); } //

C# 给某个方法设定执行超时时间 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)

在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的.那么我们又是否有一种比较通用的方法.来设定某一个方法的执行超时的时间,让该其一旦超过指定时间则跳出指定方法.进而继续向下执行呢? 答案当然是肯定的. delegate.BeginInvoke可以实现代

C# 给某个方法设定执行超时时间

在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的.那么我们又是否有一种比较通用的方法.来设定某一个方法的执行超时的时间,让其一旦超过指定时间则跳出指定方法.进而继续向下执行呢? 答案当然是肯定的. delegate.BeginInvoke可以实现代码

c# 创建socket连接辅助类-可指定超时时间

using AD.SocketForm.Model; using NLog; using System; using System.Net.Sockets; using System.Threading; namespace AD.SocketForm.Service { /// <summary> /// Socket连接类-可指定超时时间 /// 参考网址://www.cnblogs.com/weidagang2046/archive/2009/02/07/1385977.html ///

Apache服务停止:信号灯超时时间已到,指定的网络名不再可用

环境说明:Apache2.4.10,Windows Server 2008 R2 问题说明: apache服务用于下载文件,但是在运行一段时间后,突然挂了. 其错误提示如下所示: [error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover. [error] (OS 10038) : Child

mongodb建立索引时如何指定超时时间

mongodb自从2.2版本起为索引建立了TTL(time to live),可以指定一个类型为日期的字段为文档的索引并指定TTL(以秒为单位),mongodb内部每分钟执行一次检查TTL,如果超时则删除指定的文档,该特性用来实现session很适合. 使用java创建索引时,使用如下 //col为collection对象 BasicDBObject index = new BasicDBObject(); //_lastm为Date类型数据 index.put("_latm", 1)

异步操作超出页面超时时间

在园子博客程序实现异步化改造后,在日志中发现这样的错误提示: System.Web.HttpUnhandledException (0x80004005): 引发类型为“System.Web.HttpUnhandledException”的异常. System.TimeoutException: 异步操作超出页面超时时间. 对应的英文错误信息是:an asynchronous operation exceeded the page timeout. 这个错误说明了某个异步任务的执行时间超出了Pa

接口调试工具ApiPost的发送超时时间设置方法

有部分使用ApiPost的同学反应:发送接口调试时,响应超时时间设置的太短导致接口访问失败,怎么设置呢? 就连百度也有很多人在搜: 今天就来说一说. ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试.管理工具.它支持模拟POST.GET.PUT等常见请求,是后台接口开发者或前端.接口测试人员不可多得的工具 . 官网:https://www.apipost.cn/ ApiPost的发送超时时间设置方法 对于老版本的ApiPost,这个超时时间的确是无法设置的.新