当前位置:编程学习 > C#/ASP.NET >>

sp1234:敢不敢给我一个“事件驱动”的例子???!!!

先说明情况:
管理员登录系统,然后发起一个填写表单的任务,从组织架构中选择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 楼 caozhy 的回复:
按照你的说法,所谓“事件驱动”就是回调(被调用者发起通讯/调用),而所谓定时服务就是轮询。

如果是你来完成编码的工作,你会怎么样设计代码呢?
求指点 --------------------编程问答-------------------- 如果是有定时需求,那么就使用系统定时器嘛。

如果你习惯于“只在必要的时间做必要的事”,也就是删除多余的代码,这就是目的。 --------------------编程问答-------------------- 看你用的系统是否支持双工通讯。比如说sql server支持触发器和集成服务,但是性能其实也一般。

也可以放在应用层用事务队列去做。

你的业务是否固定。等等。

不是说非要某一架构才是最先进的。那些高性能的设计,往往从业务上来说都是很丑陋的,但是从另一个维度来说又相当优雅。 --------------------编程问答--------------------
引用 3 楼 sp1234 的回复:
如果是有定时需求,那么就使用系统定时器嘛。

如果你习惯于“只在必要的时间做必要的事”,也就是删除多余的代码,这就是目的。


那就帖子的场景来说,难道没有比轮询更好的解决方案?
--------------------编程问答-------------------- 如果你写大量并行操作的程序,例如使用silvelright来做一些需要反复跟踪优化来改善性能的游戏,你根本不敢滥用定时器。

所以这里只是一个初步的概念,并不是说凡是事件驱动就如“书本上的定理针对学生作业”一样地彻底解决了你毕业考试的问题。在实际开发中,书本知识只是入门。所以一种设计知识,只是一种工具。如果一定要抬杠说“知道了这种知识一样会出问题”就没有意思了。 --------------------编程问答--------------------
引用 4 楼 caozhy 的回复:
看你用的系统是否支持双工通讯。比如说sql server支持触发器和集成服务,但是性能其实也一般。

也可以放在应用层用事务队列去做。

你的业务是否固定。等等。

不是说非要某一架构才是最先进的。那些高性能的设计,往往从业务上来说都是很丑陋的,但是从另一个维度来说又相当优雅。


嗯 十分感谢,回头我查查“双工通讯”等提及到的的资料 --------------------编程问答--------------------
引用 6 楼 sp1234 的回复:
如果你写大量并行操作的程序,例如使用silvelright来做一些需要反复跟踪优化来改善性能的游戏,你根本不敢滥用定时器。

所以这里只是一个初步的概念,并不是说凡是事件驱动就如“书本上的定理针对学生作业”一样地彻底解决了你毕业考试的问题。在实际开发中,书本知识只是入门。所以一种设计知识,只是一种工具。如果一定要抬杠说“知道了这种知识一样会出问题”就没有意思了。
  ……

嗯~~貌似是有点懂了,但其实还是不懂。
还是等经验多了再回头看。
--------------------编程问答-------------------- P哥意思应该是

在什么环境 什么业务下使用什么解决方案 。并不是说哪个方案是一定好的。

--------------------编程问答-------------------- P哥的妹子是不是坚持住了!P哥变幸福了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,