代码之家  ›  专栏  ›  技术社区  ›  Matthew Rathbone

我可以在ASP.NET MVC中安全地生成线程吗?

  •  3
  • Matthew Rathbone  · 技术社区  · 17 年前

    我有一个计划的任务,我需要通过浏览一个页面来启动,我的网络主机不允许我使用Windows调度程序。

    这个任务执行的一个任务是从其他网站获取一些数据,因为Web请求的速度有多慢,所以我已经将任务设置为使用线程。

    从MVC操作运行此任务似乎会导致整个Web服务器变得古怪,使其拒绝加载更多的页面。

    从Web应用程序使用线程是否不好?我有安全的方法吗?有哪些线程限制?我真的只需要知道更多的信息?

    编辑:子问题

    如果我使用线程池中的线程(由ASP.NET运行时使用( 谢谢Anton )可以限制它可以使用的线程数吗?ASP.NET线程池大小限制是什么?

    最好是有一个单独的网站,这样做?可能是包含单独的ASP.NET应用程序的虚拟文件夹?这会阻止我限制线程池,对吗?

    3 回复  |  直到 17 年前
        1
  •  3
  •   Anton Gogolev    17 年前

    当为传入请求提供服务时,ASP.NET运行时从.NET获取线程 ThreadPool 容量有限。因此,如果您使用的是来自该线程池的线程,这可能会损害应用程序的可伸缩性。

    解决这个问题的方法是 Thread 但是当你的应用程序池被回收时,这些会被杀死。

        2
  •  3
  •   Marc Gravell    17 年前

    如果它主动地导致了一个问题,我会感到惊讶,只要这些线程不试图与请求/响应(现在可能不存在)进行对话。你看到了什么症状?你能定义“古怪”吗?

    我经常使用线程进行日志记录等,没有问题。

    为了将影响最小化,可以使用生产者/使用者模式,因此您只有一个(或几个)工作线程,为许多ASP.NET MVC请求/响应线程提供服务。

        3
  •  0
  •   Fredrik Mörk    17 年前

    我认为这取决于怎么做。在ASP.NET下的线程处理方面,我不是很有能力,但我认为有一个风险,您最终会使用线程,否则将用于服务来自客户端的请求。

    Here is a tutorial on multithreading in ASP.NET ,这可能有助于您向前迈进一步。

    推荐文章