先说明情况:
管理员登录系统,然后发起一个填写表单的任务,从组织架构中选择100个人。
这样,系统就产生了100个待办(待办表就多了100条记录)。写两个类:
1:查询待办表中没有处理过的记录,插入到短信表。
2:查询短信表,把短信发给这100个用户的手机,内容是“您有XXOO任务,速度登录XX系统完成!”目前的做法是:把上面这两个类,扔到自己写的一个定时服务。每隔1分钟运行一次。
还有其它种好多种功能都像上面那样轮询数据库,都扔到定时服务里面。后果是:每天的txt日志文件有20M大,数据库性能差等各种问题。刚刚看了大神SP1234的帖子:http://bbs.csdn.net/topics/390331962?page=1
"事件驱动,请记住这个概念。不是说我们写一大堆while去轮询底层系统。"
感觉很有道理:当有新任务的时候,才会发短信,干嘛没事的时候要轮询呢?无用功大多了!
以我目前的水平,如果不用定时服务的话,我会写一个“完成发起任务”的方法:
public void FinishNewTask()
{
  //产生待办
  //发短信
   // 其它功能
}
但很明显,这种做法是十分不可取的!现在,我十分想使用“事件驱动”这种设计去完成代替定时服务的功能:点击“完成发起任务”,页面马上提示“发起成功”,然后“驱动”后台自动有序地把短信发出去,直至有新的任务发起!但我又不知道需要掌握哪些编程知识,一直以来都是“CURD”。问题:我需要掌握哪些知识,才能使用事件驱动的设计完成上面的功能!C#高手设计编程

解决方案 »

  1.   

    看你用的系统是否支持双工通讯。比如说sql server支持触发器和集成服务,但是性能其实也一般。也可以放在应用层用事务队列去做。你的业务是否固定。等等。不是说非要某一架构才是最先进的。那些高性能的设计,往往从业务上来说都是很丑陋的,但是从另一个维度来说又相当优雅。
      

  2.   

    如果你写大量并行操作的程序,例如使用silvelright来做一些需要反复跟踪优化来改善性能的游戏,你根本不敢滥用定时器。所以这里只是一个初步的概念,并不是说凡是事件驱动就如“书本上的定理针对学生作业”一样地彻底解决了你毕业考试的问题。在实际开发中,书本知识只是入门。所以一种设计知识,只是一种工具。如果一定要抬杠说“知道了这种知识一样会出问题”就没有意思了。