如何估算方法执行时间?

我需要取消方法执行,如果它需要两秒以上才能完成并在另一个线程上重新启动它。

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

在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(Func 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); } 

您应该在两秒钟内创建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中,您应该中止运行方法的线程

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

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

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

两件重要的事情:

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