如何在ASP.NET中运行多个线程?相互不影响?

[已解决] 如何在ASP.NET中运行多个线程?相互不影响?

20
[Web开发 > ASP.NET]
比如我有一个定时器(相当于WinForm中的Timer),需要在程序运行的时候,每隔一段时间自动执行一些东西,但是不使用页面控制,所以不能使用刷新页面这样的老办法,完全是自动运行在程序后台的,有什么办法吗?
提问时间:2010/4/1 13:21:35 | 提问者:zsu | 悬赏:20 | 浏览:442
最佳答案
方法很多,这里举两个可行的方案:
方法一:使用Windows 服务。
因为你提到了WinForm中的Timer,Windows服务可以从WinForm程序稍加修改就能做成,并且不会受ASP.NET程序的影响。
这种做法的优点:运行相对独立。
这种做法的缺点:和网站整合比较差,很多东西需要你重新编译和部署,并且升级需要同步多个地方(当然如果你的这个服务相对网站的逻辑是独立的,那么影响不大)。

方法二:使用多线程。
可以在Global.asax中的Application_Start()方法中,添加一个线程,如:
Thread mulThread = new Thread(YourMethod);
mulThread.Start();
其中YourMethod就是你的这个需要执行的方法。
至于循环,你可以在YourMethod内部做,也可以在mulThread外部放一个Timer,这个应该不难。
这种做法的优点:和网站整合紧密,方便同步更新和测试。
这种做法的缺点:无法使用某些方法(如获取HttpContent.Current将会为null,所以包括Server在内的很多方法都无法使用,但可以通过Fake一个HttpContent来实现),这个问题也同样存在于方法一中;同时由于受到ASP.NET程序(应用程序池)的影响,这个线程不一定能每时每刻都运行,当ASP.NET程序停止服务之后,必须要等待第一个请求之后,Application_Start方法才能执行;一定要注意到线程安全问题,以免mulThread运行或出错的时候,影响到其他的公共资源。
回答时间:2010/4/1 13:31:59 | 回答者:GaLiJiKuai
其他参考答案(0)
提交失败!请检查错误!错误信息:

注:以上所有信息由网友提供,仅供交流、参考,均不代表盛派网络言论,如果有任何问题或不妥,请立即联系我们

以下信息或许对您有用: