C# 给某个方法(带参)设定执行超时时间

方法如下 public void getClassNameByHandleValue(Configuration config)
目前想给这个方法设置一个超时时间 如 5秒没有执行完毕的话则返回一个表示,表示在时间内没有执行完方法。

-1

3个回答

图片说明
像这种限时执行方法超时后最好还是要有一定的机制确保调用的方法能够结束释放掉占用的资源,否则很容易就内存泄漏。如果用线程去控制的话可以使用Abort()方法强制结束线程,如果不用线程使用一楼提供的方法的话也要自己在Do这个方法里实现一个检测机制保证方法能够执行完毕正常返回

-2
wh3845348
99887744 是的,目前正在调试中。
9 个月之前 回复
hxycsdn9159
hxycsdn9159 回复wh3845348: 看你方法的名字是要根据配置中的句柄值获取类名,跳过的思路就是在这个类的构造函数中首先获取当前实例的句柄值,然后在遍历配置文件中句柄值的是否发现和当前配置相同的直接跳过就好了
9 个月之前 回复
wh3845348
99887744 emmm 刚刚点错了,通过这个我已经实现基本效果了,Abont() Stop()执行过,尴尬的是由于我的方法是扫描Windows句柄,但是扫描到本程序的时候,进程是被线程占用了,导致方法执行不完返回false。正在研究如果扫描到本程序则跳过。
9 个月之前 回复
0
hxycsdn9159
hxycsdn9159 回复caozhy: 这个方法有个缺点,如果Do方法内部存在死循环或者发生什么异常导致函数无法正常执行到结束的话就会造成内存泄漏
9 个月之前 回复
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 这个方法好,lz看看吧。如果问题解决,请别忘记点下回答左上角的那个采纳哦。
9 个月之前 回复

先声明一个委托
public delegate bool GetClassName()
再声明一个类包括事件通知字段和结果
public class GetClassNameState
{
private AutoResetEvent _are;
public AutoResetEvent Are
{
get { return _are; }
set { _are = value; }
}

        private bool _result;
        public bool Result
        {
            get { return _result; }
            set { _result = value; }
        }

        public GetClassNameState()
        {
            _are = new AutoResetEvent(false);
            _result = false;
        }
    }
然后把你的方法赋给声明的委托,用异步回调方法就可以实现超时控制了。
GetClassName getClassName = new GetClassName(getClassNameByHandleValue)
GetClassNameState asyncState = new GetClassNameState();

        getClassName.BeginInvoke(new AsyncCallback(GetClassNameCallBack), asyncState);

        if (asyncState.Are.WaitOne("超时时间"))
        {
            if (asyncState.Result)
            {
                //执行成功的操作
            }
            else
            {
                //执行失败的操作
            }
        }
        else
        {
            //超时后执行的操作
        }

public void GetClassNameCallBack(IAsyncResult asyncResult)
{
object asyncState = ((AsyncResult)asyncResult).AsyncState;
GetClassName theGetClassName = (GetClassName)((AsyncResult)asyncResult).AsyncDelegate;
((GetClassNameState)asyncState).Result = theGetClassName.GetClassNameState(asyncResult);
((GetClassNameState)asyncState).Are.Set();
}

手打修改,求采纳啊

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# 给某个方法设定执行超时时间
在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死。 在这时、我们可以通过Thread、Thread + Invoke(UI)或者是 delegate.BeginInvoke 来避免界面假死, 但是这样做时,某些代码或者是某个方法的执行超时的时间还是无法操控的。那么我们又是否有一种比较通用的方法、来设定某一个方法的执行超时的时间,让其一旦超过指定时间则...
C# 通过委托+异步的方式约束函数的执行超时时间
最近一个系统中出现了一个问题 在执行某些方法的时候,会卡住,不是死循环,也不是死锁,就是卡在那不动了,然后就导致整个系统的一部分功能瘫痪了 于是就想办法看能不能给执行方法加个超时时间,超时了就自动往下走,不至于耽误整个系统的运行
C# 对一个函数设置执行的超时时间、函数执行的等待时间、等待结果的时间、允许的执行时间
2018年3月27日14:43:08 对一个函数或一段代码的执行有时间的要求(如获取输入、从网络取得信息),当希望对其设置一个最大的等待时间、超时时间时,而不论其有无得到理想的返回值都进行返回,可以使用该方法。该方法将确保指定的代码在指定的时间内让程序等待其结果,而超出这个时间的时候将会跳过并继续往下执行。 本方法没有使用定时器,但是比定时器更加容易理解,更加简单,所需要的代码...
Java实现限定方法执行时间 Future类执行超时处理
最近有个需求, 当调用外部接口长时间没有返回的话, 就执行下一步。 public static void main(String[] args) throws InterruptedException,ExecutionException { final ExecutorService exec = Executors.newFixedThreadPool(1);
C#实现函数的超时退出功能
主要是用到了System.Threading.Tasks.TaskFactory的StartNew()函数   private static void Main(string[] args) { Console.WriteLine("Begin:" + DateTime.Now); bool ret = Proc...
Python设置函数调用超时
import signal import time # Define signal handler function def myHandler(signum, frame): print("Now, it's the time") def time_out(fun): def wrapper(): signal.signal(signal.SIGINT, myHandler) ...
怎么给一个函数的运行设置超时
首先,为了使系统资源能更好分配,建立一个线程池: BlockingQueue workQueue = new LinkedBlockingQueue(3); //Integer.MAX_VALUE ExecutorService mExecutor = new ThreadPoolExecutor(4, 6, 4, TimeUnit.SECONDS, workQueue, new Th
Java实现限定方法执行时间-java 1.5以上的Future类可以执行超时处理
开发场景中有是需要对响应时间较长的接口或者方法进行处理,比如跳过继续执行,或者其它的方式,这个可以使用Future实现: 代码 -// 设置BI返回数据最长时间,如果超过此时间则跳过 Callable<String> call = new Callable<String>() { public String call() throws Exception {
java中设置某段代码运行的超时时间
一、将设置超时的代码放入线程中,我这边使用了线程池工具类, 也可直接ExecutorService thread= Executors.newCachedThreadPool(),建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 //使用线程池获取线程 ExecutorService thread = ThreadPoo...
线程执行设置超时时间
import java.util.concurrent.*; /** * 记录,备忘…… * 线程执行设置超时时间 */ public class Main2 { // 定义线程池,推荐手动创建线程池: https://blog.csdn.net/LLLLLiSHI/article/details/88057655 private static Exec...
c# 任务超时执行
最近整理下各类框架,学习一下欠缺的东西。因为前一年开发过java服务端,知道java有很多开源框架,但是毕竟起来也很累。 现在转回头从新审视c#,很基础,没有开源框架,因为以前它不开源,所以少,不用比较,全部自己造。 我们在开发服务端时,有一个很严重的问题,就是多线程处理。这就有个任务长期运行,频繁启动,以及超时问题。 java中的线程池很容易实现,c#中对应的就是Task,也可以。 但是...
python函数应对超时情况
访问一个url时,有可能出现不断的访问,没有返回的情况,此时应该设个超时时间,进行其他处理 方法: 使用使用threading的timer定时器 from threading import timer def time_limit(interval): def wraps(func): def time_out(): raise RuntimeEr...
JAVA利用线程池控制方法执行时间
va.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; /** * @author zhangming * */ public class TestFurther { public static void main(String[] args) { ExecutorService executorS
如何设置页面加载超时时间,robotframework+selenium实现
如何设置页面加载超时时间,robotframework+selenium实现,设置浏览器的超时时间,自身加载页面的超时时间 有些测试,使用的方法是如下场景,例如: 访问google超时,由于无法访问,想在10秒内退出,要不然可能登登上1分钟以上 我们想加快这个进度,使用selenium的set_page_load_timeout()就可以了 但是robotframe的seleniu...
SqlDataAdapter.Fill()时超时的一个另类的原因:你的存储过程中有超长的注释吗?
最近在研究网站中,使用SqlDataAdapter进行Fill时总超时的问题,使用查询分析器执行,结果秒出,使用Sql Server Profiler跟踪后,得到指令扔到查询分析器里,结果还是秒出,但是在页面执行,就永远是超时,相当纳闷啊 于是把Sql Server Profiler跟踪内容调整了一下 主要是追加 SP:Starting和SP:Completed以及SP:StmtStart...
java设置一段代码执行超时时间
前段时间在搞一个批量处理程序,涉及到多线程操作。但是后台服务很不给力,并发一大常常就挂了,长时间不给返回,导致我的程序也挂死在那里……  那么能不能设置一段代码执行的超时时间呢?如果处理超时就忽略该错误继续向下执行。  可是在网上搜了大半天,找到的都是无用的代码,根本不能用。  查了大量资料后发现,java早已经给我们提供了解决方案。jdk1.5自带的并发库中Future类就能满
Android 设置方法超时
private ExecutorService executorService = Executors.newSingleThreadExecutor(); /** * 有超时时间的方法 * @param timeout * @return */ private String timeoutMethod(int timeout) { String result = &quot;默认&quot;; ...
java限制方法执行时间
核心第一步 创建线程池对象 核心第二步 创建Callable对象,重写call方法。 核心第三步 创建Future 对象 核心第四步 方法调用,设置超时时间   -----------------------------------------------------  完整实例代码如下 ----------------------------------------------...
C#: 一个方法执行超时 timeout 检查的实现
我们经常有这样的需求:如果一个方法的执行,超过了一个设定时间(timeout)就需要立即返回不再继续,这里我利用 C# 异步委托的 AsyncWaitHandle 来尽量简便的实现这一需求。 具体实现如下。注意,这里需要被调用的方法遵守 delegate TR TimeOutDelegate(T param); 形式的方法签名,如有其他需要,可以自行定制也很方便。 [csharp] namespa
java 方法超过执行时间后抛出异常
问题描述:近期由于搭建JMS服务,需要在发送消息后,等待30秒,从返回消息队列获取返回消息。但是从消息队列获取消息的方法是无限等待一直到获取消息,现在需要在三十秒之内获取到返回消息,如果超过三十秒则中断。 解决思路:可以使用线程的方式。具体思路如下: 使用ExecutorService、Callable、Future实现有返回结果的线程 ExecutorService、Callable、Fu...
监控一个方法的执行时间(不用抛出InterruptedException异常)
在一个调用链上,往往有多个方法或者应用协同来处理,那么如果在一个方法上耗时比较长的话,往往会导致整体响应时间过长,或者导致系统错误,http调用还可以设置超时时间,如果一个方法处理某个东西时间过长了怎么办,网上找到很多监控方法,大多都是要抛一个可中断的异常才能行,下面介绍一个不用抛InterruptedException异常的方法。直接上代码,很容易懂,就不啰嗦了。package com.examp
java设置一段代码执行的超时时间的简单方法
最近有需求说设置es搜索查询不能超时配置文件的毫秒数,所以正好使用的ExecutorService类,下面就 ExecutorService使用做记录: ResultData resultData = null;     ExecutorService executor = Executors.newCachedThreadPool();     FutureTask fut
JAVA 使用多线程实现超时控制
实现描述:使用一个守护线程作为计时器,并且在计时结束时抛出一个未检测异常。   守护线程类 /**   * 本线程设置了一个超时时间   * 该线程开始运行后,经过指定超时时间,   * 该线程会抛出一个未检查异常通知调用该线程的程序超时   * 在超时结束前可以调用该类的cancel方法取消计时   */   public class TimeoutThread ext...
python 限制函数执行时间,自己实现 timeout
# coding=utf-8 import signal import time def set_timeout(num, callback): def wrap(func): def handle(signum, frame): # 收到信号 SIGALRM 后的回调函数,第一个参数是信号的数字,第二个参数是the interrupted stack frame.
asp.net中前台JavaScript库调用后台C#变量和有参函数方法
最近在做项目时,遇到了js库里调用后台的变量和函数的问题,一开始不知道咋办,google了很多。 1.封装成JavaScript库,其中调用后台C#变量:      网上有三种基本方法:  方法一:1、通过页面上隐藏域访问   方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为 ' '或"+ +"  方法三:1、或者你可以在服务器端变量赋值后在页面注册
C#中关于线程启动运行带多参数方法的操作
不带参数的用ThreadStart委托指向要执行的方法,讲ThreadStart对象传入Thread的构造函数。 public void Test() { Console.WriteLine("Test"); } ThreadStart s = new ThreadStart(Test); Thread th = new Thread(s); th.Start();
post请求总是超时
各位老师:今天出现了这样一个问题。我的app使用3G或2G,信息都能从服务端传送下来;但是连接公司的wifi却总是提示访问超时。有遇到这样的问题吗?------------------------------------------------------------------------------------------------------------------------------...
Java方法的执行时间监控 设置超时(Future 接口)
Java方法的执行时间监控 设置超时(Future 接口)需求解决方案代码参考文章 需求 在【临时数据提取】项目中,存在如下需求:程序执行用户提供的sql时,如果这条sql查询的方法执行超过(从数据库配置表获取)秒,就终止这个方法。 解决方案 用Java线程池ExecutorService类配合Future接口来实现。Future接口是Java线程Future模式的实现,可以来进行异步计算。 ...
.NET 中让 Task 支持带超时的异步等待
Task 自带有很多等待任务完成的方法,有的是实例方法,有的是静态方法。有的阻塞,有的不阻塞。不过带超时的方法只有一个,但它是阻塞的。 本文将介绍一个非阻塞的带超时的等待方法。 Task 已有的等待方法 Task 实例已经有的等待方法有这些: ▲ Task 实例的等待方法 一个支持取消,一个支持超时,再剩下的就是这两个的排列组合了。 但是 Task 实例的等待方法都有一个弊端,就是 阻塞。如...
关于spring quartz定时任务执行带参数的方法的问题
项目上有个执行定时任务的需求,我选择的是Spring Quartz。但是这个需求需要在不同的定时时间向方法传送不同的参数。发现可以使用arguments参数实现。 比如: /bean&gt; 有个定时任务是iRawDataStorageService的allDataStorage方法,这个方法需要传递一个字符串的参数。arguments 的value为空...
C# Ping 简单使用 (超时)
C# Ping 简单使用 (含超时处理) 说明,使用ping工具 1.可以用来查询域名\主机是否可以访问 2.可以用来查询域名\主机对应的ip地址 一、使用Ping类,效率比较高,相应快 程序集 System 命名空间:namespace System.Net.NetworkInformation class Program { static void...
反射动态调用webservice以及超时处理
这里主要说明的通过反射动态调用webservice超时问题的处理在做项目的过程中发现,调用WebService超过100s会报操作超时,在百度,CSDN等等都没有找到解决办法,最后实在没办法跟踪了object对象发现解决办法加一句代码   ((System.Web.Services.Protocols.WebClientProtocol)(obj)).Timeout = 1200000;//毫秒1...
java 线程/方法超时控制 (1)
java 开发中经常遇到需要对线程、线程池、接口调用进行超时控制的需求,这种需求的场景往往是存在响应时间较长的接口或者方法,进行超时控制,避免因调用时间过长,影响调用者本身的性能甚至可用性,下面简单讨论下这些场合里超时控制的方法和工具。 1. Future 接口 Future接口是Java标准API的一部分,在java.util.concurrent包中,配合有返回值的线...
调用SQL连接池 重复打开connection.Open()链接超时异常的处理
最近遇到一个很奇葩的问题,就是反复刷新页面通过SQL去查询数据的时候,按了10多遍了后系统会GG,直接卡住奔溃,一直在找问题,最后是SQL读取数据后资源无释放,连接无关闭的原因。 DBHelper.cs代码: using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClie...
实现可以指定超时的connect
如果阻塞调用connect建立tcp,当无法立即建立连接的话,connect会一直阻塞到连接建立或一个调用都没有指定超时时间的定时器超时。这种时间不确定的阻塞可能在某些情况下不适用,我们需要一个可以指定超时时间的connect。
计算service层每个方法执行的时间,使用aop实现查找哪些方法运行超时
package com.aop;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;import org.apache.commons.lang3.StringUtils;import org.apache.commons.lang3.time.St...
设置cookie登陆超时
思路,在首页设置求取登陆的时间记住,在其他页面获取当前时间和登陆时间两者比较大于多少显示登陆超时 首页设置如下 //设置cookie addCookie('logDate',logDate,0); //添加一个cookie     function addCookie(name,value,expireHours){         var cookieStr=name+&quot;=&quot;+esc...
python函数执行超时后跳过
最近写bug时遇到一个关于函数执行超时的问题,就是某一步执行时间过长,或者程序直接卡死了,找到了三种解决方法,现在叙述下,帮助需要的人。 (1)使用eventlet 参考链接:https://blog.csdn.net/zjshui/article/details/78874621 import time import eventlet #导入eventlet这个模块 eventlet....
设置PHP脚本执行超时时间的方法
设置PHP脚本执行超时的时间有下面这样一些方法: php.ini 中限定程序的最长执行时间是 30 秒,这是由 php.ini 配置文件中的 max_execution_time 变量指定,倘若你有一个需要颇多时间才能完成的程序代码,代码会由于超时而执行失败,例如要发送很多电子邮件给大量收件者,或者要进行繁重的数据分析工作,服务器会在 30 秒后强行中止正在执行的程序,如何解决这个问题呢。 一...
Java反射调用带参数的函数
目前本文中只考虑函数参数为基本类型、包装类型、String类型。其他负责类型,以后再慢慢补充。代码如下: package com.zkn.newlearn.reflect; import java.io.Serializable; /** * Created by zkn on 2016/5/9. */ public class Reflec...