`
guochunyang2004
  • 浏览: 80213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

超时时间内执行方法 ActionCall.CallWithTimeout

 
阅读更多
public class ActionCall
    {
        /*例子
         * 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);
        }*/

        /// <summary>
        /// 超时时间内执行方法
        /// </summary>
        /// <typeparam name="P"></typeparam>
        /// <typeparam name="R"></typeparam>
        /// <param name="action"></param>
        /// <param name="p"></param>
        /// <param name="isSuccess">返回是否超时</param>
        /// <param name="millisecondsTimeout"></param>
        /// <returns></returns>
        public static R CallWithTimeout<P, R>(Func<P, R> action, P p, out bool isTimeout, int millisecondsTimeout = Timeout.Infinite)
        {            
            Thread threadToKill = null;
            R r = default(R);
            Action wrappedAction = () =>
            {
                threadToKill = Thread.CurrentThread;
                r=action(p);
            };

            IAsyncResult result = wrappedAction.BeginInvoke(null, null);
            if (result.AsyncWaitHandle.WaitOne(millisecondsTimeout))
            {
                wrappedAction.EndInvoke(result);
                isTimeout = false;
               
            }
            else
            {
                //threadToKill.Abort();
                //throw new TimeoutException();
                Action abortAction = delegate
                {
                    threadToKill.Abort();
                };
                abortAction.BeginInvoke(null, null);
                isTimeout = true;
            }
            return r;
        }

    }

分享到:
评论

相关推荐

    paramiko执行命令超时的问题.pdf

    这个方法同样有不足之处,因为如果指定的超时时间小于实际命令运行时间,那么命令执行会失败,从而导致超时错误。 最终,文章中提供了一个更有效的解决方案。当远程执行长时间运行的脚本时,会遇到一种“阻塞”的...

    行业分类-设备装置-电视应用测试中超时时间动态设置方法和装置.zip

    本文将深入探讨电视应用测试中超时时间动态设置的方法和装置,帮助开发者和测试工程师优化测试流程,提升应用质量。 首先,我们要理解超时时间的概念。在软件测试中,超时时间是指系统等待某个操作或响应达到预期...

    【ASP.NET编程知识】ASP.NET页面请求超时时间设置多种方法.docx

    本文将探讨四种设置ASP.NET页面请求超时时间的方法。 方法一:通过设置`Server.ScriptTimeout`属性 你可以直接在代码中设置`Server.ScriptTimeout`的值来改变页面的超时时间,单位为秒。需要注意的是,设置的值必须...

    weblogic设置session超时时间

    WebLogic 设置 Session 超时时间 WebLogic 是一个功能强大且流行的 Java 企业级应用服务器,支持多种方式来设置 Session 的超时时间。在本文中,我们将介绍...根据实际情况,选择合适的方法来设置 Session 超时时间。

    C#函数超时执行事例

    超时处理是一种控制程序执行时间的机制,它允许我们设定一个最大执行时间,如果函数在此时间内未完成,系统将强制中断该函数的执行。这在处理可能会陷入无限循环或者执行时间过长的操作时特别有用。 在C#中,我们...

    C# 获取js执行之后的网页源代码(使用线程并设置超时功能)_20200712_140337.rar

    将其放在单独线程中执行,以防止阻塞主程序,同时设置超时机制,确保在规定时间内完成加载,避免程序无响应。通过这种方式,我们可以在C#中有效地获取到网页的最终状态,适用于需要动态内容的场景。

    详解Nginx服务器中配置超时时间的方法

    如果在超时时间内未收到完整的请求头,Nginx将返回408 Request Timeout错误。默认值为60秒。 8. **client_body_timeout**: 这个参数用于设置接收客户端请求体的超时时间。如果在指定时间内未接收到全部请求体,...

    Java线程超时监控

    如果任务在规定时间内完成,`get`方法会返回结果;否则,它将抛出一个`TimeoutException`,此时可以取消任务。 另外,`java.lang.Thread`类也提供了一种实现线程超时的方法,通过使用`join`方法。`join`可以等待...

    Tcpclient连接服务器连接超时设置

    这样,我们就可以通过`TcpClientWithTimeout`类在指定的时间内尝试连接,如果超过这个时间仍未连接成功,程序会自动中断连接尝试并抛出异常,避免了程序的无限制等待。 在实际应用中,可能还需要考虑其他因素,如重...

    Sql Server 数据库超时问题的解决方法

    Sql Server 数据库超时问题的解决方法主要包括调整等待响应时间、在企业管理器中调整等待响应时间、在查询分析器中调整等待响应时间、在.NET 中调整等待响应时间等方法。通过这些方法,可以解决 Sql Server 数据库...

    java通过线程控制程序执行超时(新)

    反射则允许我们在运行时动态获取类、方法和字段信息,这在一些复杂的超时控制场景中可能会用到,例如,我们需要监控某个特定方法的执行时间。 总结起来,Java通过线程控制程序执行超时是通过结合线程机制、Future/...

    为jquery的ajax请求添加超时timeout时间的操作方法

    总结以上所述,为jQuery的Ajax请求添加超时时间的操作方法能够让开发者更加主动地管理网络请求的行为,提升应用的响应速度和用户体验。通过合理设置timeout值,并结合success、error和complete回调函数,可以在不同...

    Java编程Webservice指定超时时间代码详解

    要设定超时时间,我们需要将代理对象强制转换为`BindingProvider`类型,然后调用`getRequestContext()`方法获取请求上下文。在上下文中,我们可以设置两个关键的超时参数:`BindingProviderProperties.CONNECT_TIME...

    QQ登陆超时怎么办,QQ登陆不上.docx

    此外,文章还讨论了QQ登陆失败的原因和解决方法,包括检查数据存储位置、删除以号码命名的文件夹、重新登录等。 本文档提供了QQ登陆超时和QQ登陆不上的解决方法,涵盖了各种可能的原因和解决方法,旨在帮助用户快速...

    java通过线程控制程序执行超时

    例如,我们可能需要在超时时停止一个正在执行的长时间方法,这可以通过反射获取该方法的`Method`对象,并调用`invoke()`方法来实现。 总结来说,Java通过线程和定时器可以有效地控制程序执行超时,结合反射可以在...

    FTP超时处理.rar

    FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar FTP超时处理.rar

    铁路系统QC国优成果-降低无线超时导致的C3降级故障率.pptx

    铁路系统QC国优成果-降低无线超时导致的C3降级故障率.pptx

    dbus-pending-call.rar_progress

    2. **超时管理**:DBus允许设置方法调用的超时时间,如果在指定时间内未收到响应,Pending Call对象可以处理超时事件。 3. **异步操作**:DBus Pending Call支持异步调用,这意味着应用程序可以继续执行其他任务,...

    win10安装realtek声卡驱动超时没有声音的解决方法.docx

    解决 Win10 安装 Realtek 声卡驱动超时没有声音的方法 在 Windows 10 预览版 10041 中, 일부用户可能会遇到麦克风不能使用、没有声音的问题。这是因为 Windows 10 预览版在安装过程中出现了 Realtek 声卡驱动超时...

    RemoteCall.zip

    在本案例中,“RemoteCall.zip”是一个包含了“RemoteCall.exe”执行文件的压缩包,显然是一个用于测试远程调用功能的系统软件。下面将详细讨论远程调用的基本概念、工作原理以及可能涉及到的技术。 1. **远程调用...

Global site tag (gtag.js) - Google Analytics