C# 超时事件

public class TimeOutEvent { public delegate void TimeOutStart(object o); private TimeOutStart timeOutStart; private Thread regexThread; private System.Timers.Timer regexTimeoutTimer; private ManualResetEvent allDone; public TimeOutEvent(TimeOutStart startAddress,int time=1000) { timeOutStart = startAddress; regexThread = null; regexTimeoutTimer = new System.Timers.Timer(); regexTimeoutTimer.Interval = time; regexTimeoutTimer.AutoReset = false; regexTimeoutTimer.Elapsed += new ElapsedEventHandler(regexTimeoutTimer_Elapsed); allDone = new ManualResetEvent(false); } public bool Start(object o) { if (timeOutStart == null) return false; allDone.Reset(); regexThread = new Thread(new ParameterizedThreadStart(Execute)); regexThread.Start(o); regexTimeoutTimer.Start(); allDone.WaitOne(); regexTimeoutTimer.Stop(); return true; } private void Execute(object o) { if (timeOutStart != null) timeOutStart(o); allDone.Set(); } void regexTimeoutTimer_Elapsed(object sender, ElapsedEventArgs e) { if (regexThread!=null && regexThread.ThreadState == ThreadState.Running) { regexThread.Abort(); } allDone.Set(); } }
应用背景
一、网络连接,超过一定的时间链接仍未成功则取消链接,返回主线程。
二、Net框架的正则表达式有时会进入死循环,可通过超时事件来防止主线程卡死。
实例代码(网络连接)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class SourceRequest { private HttpWebResponse webResponse; …… //省略代码 //供外部调用的同步获取连接响应的函数<br> public void GetResponse(string url) { //创建请求对象 <br> HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //创建超时事件<br> TimeOutEvent timeoutEvent = new TimeOutEvent(GetResponse,30000); //启动超时事件<br> timeoutEvent.Start(request); } //超时事件的执行线程<br> private void GetResponse(object request) { webResponse= null ; webResponse=((HttpWebRequest)request).GetResponse(); } …… //省略代码 } |
实现原理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述