如何估算方法执行时间?

时间:2011-02-17 05:47:43

标签: c# callback execution-time

如果完成并在另一个线程上重启它,我需要取消方法执行。

那么,有没有办法/回调机制/ HACK,我可以通过方法告诉我它超过了2秒的时间限制?

3 个答案:

答案 0 :(得分:4)

check if network drive exists with timeout in c#
https://web.archive.org/web/20140222210133/http://kossovsky.net/index.php/2009/07/csharp-how-to-limit-method-execution-time

异步模式:

public static T SafeLimex<T>(Func<T> F, int Timeout, out bool Completed)   
   {
       var iar = F.BeginInvoke(null, new object());
       if (iar.AsyncWaitHandle.WaitOne(Timeout))
       {
           Completed = true;
           return F.EndInvoke(iar);
       }
         F.EndInvoke(iar); //not calling EndInvoke will result in a memory leak
         Completed = false;
       return default(T);
   } 

答案 1 :(得分:2)

你应该在两秒钟内创建System.Threading.Timer,并在另一个线程中运行你的方法并等待它的回调,如果方法在计时器运行之前完成你应该配置计时器,否则你应该中止你方法的线程执行。这很简单,例如

using (new Timer(BreakFunction, true, TimeSpan.FromMinutes(2), Timeout.Infinite))
                    {
                        //TODO:here you should create another thread that will run your method
                    }

在BreakFunction中,您应该中止运行方法的线程

答案 2 :(得分:1)

如果你能找到它会很好。我一直在寻找它。

我通常做的是在另一个Thread中启动该方法,并在这种情况下以2秒开始Timer。它第一次举起活动,只需:

if (a.IsAlive)
{
   a.Abort();
}

两件重要的事情:

  • 声明的Thread应该通过处理计时器的方法可见
  • 调用Abort()时会引发ThreadAbortException,因此您应该在方法中正确处理它。