如何估算方法执行时间?
我需要取消方法执行,如果它需要两秒以上才能完成并在另一个线程上重新启动它。
那么,有没有办法/回调机制/ 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 ,因此您应该在方法中正确处理它。