C# 通用代码执行超时机制:完整指南
在软件开发中,控制代码块执行时间至关重要,尤其在处理不可靠或耗时的外部依赖项(如 API 调用或数据库查询)时。为此,需要一种通用的方法来为单行代码设置超时。
实现通用超时机制
构建通用超时机制的核心在于终止长时间运行的代码并拦截可能出现的错误。为此,我们可以采用分层解决方案:
CallWithTimeout
),它接收一个操作和超时持续时间作为输入。此方法在单独的线程上启动代码执行,并附加包装委托来跟踪进度。TimeoutException
。实践操作
以下是具体的实现细节:
<code class="language-csharp">class Program { static void Main(string[] args) { // 设置 6000 毫秒(6 秒)的超时 CallWithTimeout(FiveSecondMethod, 6000); // 设置 4000 毫秒(4 秒)的超时 CallWithTimeout(FiveSecondMethod, 4000); } static void FiveSecondMethod() { Thread.Sleep(5000); } } static void CallWithTimeout(Action action, int timeoutMilliseconds) { Thread threadToKill = null; Action wrappedAction = () => { threadToKill = Thread.CurrentThread; try { action(); } catch (ThreadAbortException ex) { Thread.ResetAbort(); // 避免强制终止 } }; IAsyncResult result = wrappedAction.BeginInvoke(null, null); if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds)) { wrappedAction.EndInvoke(result); } else { threadToKill.Abort(); throw new TimeoutException(); } }</code>
此实现允许您以明确定义的超时执行代码,同时提供灵活地处理和优雅地控制执行过程。
以上是如何在 C# 中实现代码执行的通用超时机制?的详细内容。更多信息请关注PHP中文网其他相关文章!