如何在ASP.NET中运行多个线程?相互不影响?
[已解决] 如何在ASP.NET中运行多个线程?相互不影响?
当前页面:http://www.senparc.com/SZD-41
{ 收藏当前页面 }
[已解决]
如何在ASP.NET中运行多个线程?相互不影响?
最佳答案
方法很多,这里举两个可行的方案:
方法一:使用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运行或出错的时候,影响到其他的公共资源。
方法一:使用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)
提交失败!请检查错误!错误信息:
以下信息或许对您有用:
- [已解决] 20 ASP.NET 4.0中关于图标、SEO、页面输出缓存(Charts,SEO,O... 2010/10/15 12:41:36
- [已解决] 10 Unable to read data from the transport c... 2010/10/9 15:45:37
- [已解决] 20 如何让线程停止,等待10秒钟? 2010/9/9 22:51:30
- [已解决] 20 最新的Razor模板语法介绍在哪里可以找到? 2010/8/5 14:21:42
- [已解决] 10 请问C#中的WebResponse.CharacterSet是通过真么得到的?是... 2010/7/21 13:19:33