相关文章推荐
转载:http://outofmemory.cn/code-snippet/1762/C-how-control-method-zhixingshijian-chaoshi-ze-force-quit-method-execution/comments1         http://www.

转载: http://outofmemory.cn/code-snippet/1762/C-how-control-method-zhixingshijian-chaoshi-ze-force-quit-method-execution/comments1

http://www.cnblogs.com/08shiyan/archive/2011/07/30/2122183.html

C#实现带有超时功能的回调函数类

http://www.blue1000.com/bkhtml/c17/2013-01/71047.htm

有时候我们需要控制方法的执行时间,如果超时则强制退出。

要控制执行时间,我们必须使用异步模式,在另外一个线程中执行方法,如果超时,则抛出异常终止线程执行。

如下实现的方法:

class Program
    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);
    static void CallWithTimeout(Action action, int timeoutMilliseconds)
        Thread threadToKill = null;
        Action wrappedAction = () =>
            threadToKill = Thread.CurrentThread;
            action();
        IAsyncResult result = wrappedAction.BeginInvoke(null, null);
        if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
            wrappedAction.EndInvoke(result);
            threadToKill.Abort();
            throw new TimeoutException();
View Code
                taskfactory默认执行慢的问题
            
Task.Factory.StartNew不是直接创建线程,创建的是任务,它有一个任务队列,然后通过任务调度器把任务分配到线程池中的空闲线程中,如果任务的数量比线程池中的线程多,线程池的线程数量还没有到达上限,就会创建新线程执行任务。如果线程池的线程已到达上限,没有分配到线程的任务需要等待有线程空闲的时候才执行。
大家好,我是良许。 在我们的日常工作中,需要我们重复做的工作简直不能太多。比如,我们想要确认网络是否是连通的,传统的做法就是使用 ping 命令不停去测试某个地址(比如百度)。网络比较好还好说,但如果网络很差,那么就需要一直去运行 ping 命令。 作为程序员,重复性的工作怎么能忍呢?只要是重复性的工作,就有可能使用编程的方式来解决! 下面良许就介绍两种方法重复执行一条命令直至运行成功。 (PS:本文适合初学者,高手可绕道) 解决重复性的工作,自然而然会想到循环 。在 Shell 里,循环无非 3 种:for、while、until 。在本文里,我们使用后两种循环:while 、un
工作中常有这样的场景,并发执行一些任务,并等待所有的任务执行完成,进行后续处理,这里总结了几种方法用于满足这种业务场景。 ### 二、闭锁方式 闭锁是Java早期提供的一种并发锁,其特点是每个任务颁发一个令牌,任务执行完成释放令牌,主进程可以一直阻塞等待所有的令牌被释放,当所有令牌都被释放后,主进程可以继续执行。依据闭锁的这种特效可以满足上面的任务场景。 ```jav