我有一个计划任务,我需要通过浏览页面启动,我的webhost不允许我使用Windows调度程序。
此任务执行的一项任务是从一堆其他网站获取一些数据,因为网络请求的速度有多慢,我设置了使用线程的任务。
从mvc操作中运行此任务似乎会导致整个Web服务器变得古怪,使其拒绝再加载任何页面。
从网络应用程序使用线程是不是很糟糕?有没有办法让我安全地做到这一点?有哪些线程限制?我真的需要了解更多信息吗?
编辑:提交
如果我使用线程池中的线程(由ASP.NET运行时使用(感谢Anton ),我可以限制它可以使用多少个线程吗?什么是ASP.NET线程池大小限制?
最好有一个单独的网站来做到这一点?也许是包含单独的ASP.NET应用程序的虚拟文件夹?这会阻止我限制线程池吗?
答案 0 :(得分:3)
如果它主动引起问题,我会感到惊讶,只要这些线程不试图回复请求/响应(现在可能已经消失)。你看到了什么症状?你能定义“古怪”吗?
我经常使用线程进行日志记录等,没有问题。
为了最大限度地减少影响,您可以使用生产者/消费模式,因此您只有一个(或几个)工作线程,为许多ASP.NET MVC请求/响应线程提供服务。
答案 1 :(得分:3)
在处理传入请求时,ASP.NET运行时从.NET ThreadPool
获取线程,该线程容量有限。因此,如果您使用来自该池的线程,这可能会损害您的应用程序的可伸缩性。
解决这个问题的方法是产生通常的Thread
,但是当你的AppPool被回收时,这些就会被杀死。
答案 2 :(得分:0)
我认为这取决于它是如何完成的。在ASP.NET下进行线程化时,我并不是非常称职,但我认为您最终可能会使用以其他方式用于处理客户请求的线程。
Here is a tutorial on multithreading in ASP.NET,这可能会帮助你前进一点。