应用多线程:解决等待超时问题

本文分享了一种利用多线程处理等待超时问题的方法,适用于数据库连接、远程webservice调用等场景。通过异步执行可能超时的操作,并使用ManualResetEvent进行等待通知,如果超过设定的超时时间,将触发超时事件。提供了TimeoutChecker类的实现,该类用于执行会超时的代码并管理超时回调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     我和老米曾经讨论过等待超时的问题觉得是比较挺常用的代码,所以在这里和大家分享一下。我和老米的思路略有不同这里没有孰优孰略,只是习惯差异而已。

    我们日常工作中常会遇到这种场景:数据库、远程webservice、串口设备等等连接失败,或其他需要长时间等待才能返回错误信息的情况。这时我们需要设定一个超时时间如果出现问题能够及时反馈给用户。虽然我们给数据库或webservice把超时设定很短,但这样做不灵活因为有些操作本身就是很耗时的。因此我们应该利用多线程来解决这个问题。

    其实这个问题很好解决,会超时的操作用异步执行(异步委托或者线程池),用户主线程进行等待通知(ManualResetEvent)。如果用户在超时时间能都没等到就会激发超时事件通知用户。看代码吧一目了然:

 

  1. public class TimeoutChecker
  2.     {
  3.         long _timeout;              //超时时间
  4.         Action _proc;               //会超时的代码
  5.         Action _procHandle;         //处理超时
  6.         Action _timeoutHandle;      //超时后处理事件
  7.         ManualResetEvent _event = new ManualResetEvent(false);
  8.         public TimeoutChecker(Action proc, Action timeoutHandle)
  9.         {            
  10.          &nb
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值