精华内容
下载资源
问答
  •  《oracle database 11g rman备份与恢复》提供了在硬件、软件、操作发生故障时保护数据库的详细信息。详细解释了如何配置数据库,创建精确的归档以及如何执行系统还原。通过命令行或oracle企业管理器(oem)使备份...
  • 用户可以直接使用平台已有功能进行信息信息化建设,平台提供了完整的用户管理,权限管理,流程和信息管理体系,并且提供了大量的开发组件和开箱即用的应用,可以大幅度减化企业信息化建设成本和业务应用开发难度。...
  • 本例只做echo服务器,还未考虑由服务器主动向客户发送信息。 4、SocketAsyncEventArgs的UserToken被直接设定为被接受的客户端Socket。 5、没有使用BufferManager 类,因为我在初始化时给每一个...
  • 比如,现在的服务器CPU过高了,则系统记录下来,然后开始发送邮件通知用户,但是如果在10秒之内CPU恢复了;或者我不希望用户得知这个CPU的信息,因为我就在现场,我可以及时知道怎么处理这种情况,...
    原文:一种延迟方法调用的实现

    需求场景

    最近遇到一种场景,需要延迟某个步骤的实现,以便在延迟的过程中能够及早处理,从而取消任务。 比如,现在的服务器CPU过高了,则系统记录下来,然后开始发送邮件通知用户,但是如果在10秒之内CPU恢复了;或者我不希望用户得知这个CPU的信息,因为我就在现场,我可以及时知道怎么处理这种情况,这个时候准备拨打电话的这个方法的调用就不能被执行,需要延迟一段时间,以便能够被取消——以上场景仅供参考。

    代码实现

      以下是我的一个实现方式,供大家讨论,或者有更好的方式可以改进。

    这种方法旨在能够方便的延迟任意方法的执行:

    定义任务接口 

      这是一个基本的线程任务的接口,包括任务名称、线程的运行状态、启停线程。

    1     interface ITask
    2     {
    3         string Name { get; }
    4         bool IsRunning { get; }
    5         void Start();
    6         void Stop();
    7         void Run();

    8     } 

      定义延迟的信息类

      保存当前需要延迟的方法,以及需要延迟的时间等

      1         class LazyItem

     2         {
     3             private readonly int _timeout;
     4             private readonly DateTime _enqueueTime;
     5 
     6             public bool IsTimeout
     7             {
     8                 get { return (DateTime.Now - _enqueueTime).TotalSeconds > _timeout; }
     9             }
    10             public string Key { getprivate set; }
    11             public Action Continue { getprivate set; }
    12 
    13             public LazyItem(string key, int timeout, Action continueAction)
    14             {
    15                 _enqueueTime = DateTime.Now;
    16                 _timeout = timeout;
    17                 Key = key;
    18                 Continue = continueAction;
    19             }
    20         }

      延迟的实现

      主要是执行一个定时的任务,去检测被延迟的方法是否达到了超时的时间,如果达到,则执行该方法。另外,提供一个可供取消方法的函数。

      1     class LazyInvoker : ITask

     2     {
     3         public string Name
     4         {
     5             get { return "Lazy Invoke Task"; }
     6         }
     7 
     8         public bool IsRunning { getprivate set; }
     9 
    10         private readonly ConcurrentDictionary<string, LazyItem> _lazyActions = new ConcurrentDictionary<string, LazyItem>();
    11 
    12         public void Start()
    13         {
    14             Task.Factory.StartNew(Run);
    15             IsRunning = true;
    16         }
    17 
    18         public void Stop()
    19         {
    20             IsRunning = false;
    21         }
    22 
    23         /// <summary>
    24         /// 检测被延迟的任务,达到超时时间则触发
    25         /// </summary>
    26         /// Created by:marvin(2014/10/11 12:14)
    27         public void Run()
    28         {
    29             while (IsRunning)
    30             {
    31                 CheckContinue();
    32                 Thread.Sleep(1 * 1000);
    33             }
    34         }
    35 
    36         private void CheckContinue()
    37         {
    38             if (_lazyActions.Count <= 0return;
    39 
    40             var removeKeys = (from lazyItem in _lazyActions where lazyItem.Value.IsTimeout select lazyItem.Key).ToList();
    41             if (removeKeys.Count <= 0return;
    42 
    43             foreach (var key in removeKeys)
    44             {
    45                 LazyItem tmp;
    46                 if (_lazyActions.TryRemove(key, out tmp))
    47                 {
    48                     tmp.Continue();
    49                 }
    50             }
    51         }
    52 
    53         /// <summary>
    54         /// 延迟工作
    55         /// </summary>
    56         /// <param name="id">The identifier.</param>
    57         /// <param name="lazyTimeout">The lazy timeout.</param>
    58         /// <param name="continueAction">The continue action.</param>
    59         /// Created by:marvin(2014/10/11 11:48)
    60         public void LazyDo(string id, int lazyTimeout, Action continueAction)
    61         {
    62             if (!_lazyActions.ContainsKey(id))
    63             {
    64                 if (_lazyActions.TryAdd(id, new LazyItem(id, lazyTimeout, continueAction)))
    65                 {
    66                     //Console.WriteLine("lazy action : {0} , timeout : {1}", id, lazyTimeout);
    67                 }
    68             }
    69         }
    70 
    71         /// <summary>
    72         /// 取消任务
    73         /// </summary>
    74         /// <param name="actionKey">The action key.</param>
    75         /// Created by:marvin(2014/10/11 12:02)
    76         public void Cancel(string actionKey)
    77         {
    78             if (_lazyActions.ContainsKey(actionKey))
    79             {
    80                 LazyItem tmp;
    81                 if (_lazyActions.TryRemove(actionKey, out tmp))
    82                 {
    83                     Console.WriteLine("lazy action “{0}” had removed", tmp.Key);
    84                 }
    85             }
    86         }
    87     }

     测试

      1     class Program

     2     {
     3         static void Main(string[] args)
     4         {
     5             var lazyInvoker = new LazyInvoker();
     6             lazyInvoker.Start();
     7 
     8             //延迟7秒运行
     9             lazyInvoker.LazyDo(Guid.NewGuid().ToString(), 7, DoSomething);
    10             Thread.Sleep(5 * 1000);
    11 
    12             //延迟3秒运行,但是3秒的时候被取消
    13             var id = Guid.NewGuid().ToString();
    14             lazyInvoker.LazyDo(id, 5, DoSomething);
    15             Thread.Sleep(3 * 1000);
    16             lazyInvoker.Cancel(id);
    17 
    18             Console.ReadKey();
    19         }
    20 
    21         private static void DoSomething()
    22         {
    23             Console.WriteLine("Now time is :" + DateTime.Now.ToString("HH:mm:ss"));
    24         }
    25     }

      运行结果如下:

     

     

    posted on 2014-11-27 01:07 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/4125469.html

    展开全文
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
  • 新闻公告系统,可以让你此刻是怎么回事,并告知您的客户,通知即将举行的活动。知识库允许定义频率最常见问题的答案。定制自定义客户区主题可以很容易地集成到BoxBilling。管理员和客户的意见和主题,也可以完全...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送服务器服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。...
  • 急心情,特此开发在线支持功能,您无需登录网站、论坛、发送电子邮件等,即可将您的反馈信息在本程序中通过“支持中心”立 刻发送到官方站点支持中心等待解决。  守护精灵程序官方网站:...
  • 3.10.6 使用FTP发送和接收文件 59 3.10.7 UNIX系统性能监控工具 60 3.11 UNIX中的磁盘和存储 64 3.11.1 磁盘存储配置选择 65 3.11.2 监控磁盘使用 65 3.11.3 磁盘存储、性能和可用性 66 3.12 RAID系统...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    1) 客户向服务器发送请求, 每个请求的长度不定. 请求的长度在第一个INT中指定. 2) 每个服务器通常会向多种客户提供服务, 例如, TS要同时向CP, NP提供服务, CP要向NP和其他CP提供服务, 同时还是其他CP, TS, SP的客户....
  • 聚生网管2.11破解版P2P

    2010-07-18 23:56:51
    就可以完全控制,此后QQ所发出的全部报文都会被拦截,发送消息会显示“发送消息失败,是否重试”等等,这样就会迫使QQ下线,其他聊天工具截获原理同QQ一样。 14.为什么我控制了对方进行http和ftp下载,但是对方仍旧...
  • 聚生网管 - 限制网速

    2009-08-18 17:54:25
    就可以完全控制,此后QQ所发出的全部报文都会被拦截,发送消息会显示“发送消息失败,是否重试”等等,这样就会迫使QQ下线,其他聊天工具截获原理同QQ一样。 14.为什么我控制了对方进行http和ftp下载,但是对方仍旧...
  • //将服务器信息放入通用套接字中 sockaddr_in server; server.sin_family = AF_INET; server.sin_port = htons(SPort); server.sin_addr.s_addr = inet_addr("192.168.73.1"); //客户端连接服务端 ...
  • 数据库课程设计(基于B/S)

    热门讨论 2008-12-28 15:28:06
    (6)系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢复,数据库备份后,如果出了什么意外可以恢复数据库到当时备份的状态,这提高了系统和数据的安全性,有利于系统的维护。...
  • 怎么样让大量的ETL任务准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复甚至执行错误告警与完整的日志查询。hera任务调度系统就是在这种背景下衍生的一款分布式调度系统。...
  • E.8.2 当我用startx命令启动X时, 我得到一个出错信息说没有安装服务器, 并回到提示符. 哪里出错了? E.8.3 当我启动X时, 我只看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows...
  • 4.5.4 怎么打出线程栈信息。 开源框架 4.5.5 简单讲讲tomcat结构,以及其类加载器流程,线程模型等。 4.5.6 tomcat如何调优,涉及哪些参数 。 4.5.7 讲讲Spring加载流程。 4.5.8 Spring AOP的实现原理。 4.5.9...
  • 2. 恢复注销命令(没有这个,怎么下线呢)。 3. 登录首先获取所有钥匙,避免出现登录后被Kick out。 4. 感谢网友008的提醒,号码格式化字符%d已被替换为%u。 Version 2.4 (2008-7-24) 1. 好友添加。 2. Packed with...
  • MYQQ2009 - 用控制台上QQ

    2009-05-11 00:29:28
    2. 恢复注销命令(没有这个,怎么下线呢)。 3. 登录首先获取所有钥匙,避免出现登录后被Kick out。 4. 感谢网友008的提醒,号码格式化字符%d已被替换为%u。 Version 2.4 (2008-7-24) 1. 好友添加。 2. Packed with...
  • Linux从入门到精通

    2010-04-25 19:58:09
    E.8.2 当我用startx命令启动X时, 我得到一个出错信息说没有安装服务器, 并回到提示符. 哪里出错了? E.8.3 当我启动X时, 我只看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows...
  • linux从入门到精通.chm

    2010-05-17 09:11:20
    E.8.2 当我用startx命令启动X时, 我得到一个出错信息说没有安装服务器, 并回到提示符. 哪里出错了? E.8.3 当我启动X时, 我只看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows...
  • 《Linux从入门到精通》

    热门讨论 2008-09-04 17:05:49
    E.8.2 当我用startx命令启动X时, 我得到一个出错信息说没有安装服务器, 并回到提示符. 哪里出错了? E.8.3 当我启动X时, 我只看到灰色的背景和一个X光标. E.8.4 我如何客户化X窗口管理器? E.8.5 我不喜欢想Windows...

空空如也

空空如也

1 2 3
收藏数 49
精华内容 19
关键字:

怎么恢复服务器发送信息