【问题标题】:Must I add explicit threading to my Web API REST methods?我必须向我的 Web API REST 方法添加显式线程吗?
【发布时间】:2013-11-26 23:22:22
【问题描述】:

我创建了一些将由手持/Windows CE 客户端调用的 Web API REST 方法。所以服务器可能会同时被多个(嗯,更像它,问题是有多少)请求同时击中。

REST 方法会自动处理这个问题,还是我必须显式添加线程代码以使一个客户端的请求不会干扰另一个客户端?

【问题讨论】:

    标签: c# multithreading rest asp.net-web-api windows-ce


    【解决方案1】:

    不需要 - asp.net 框架已经汇集了多个线程来同时处理多个请求。

    传入的请求被排入队列,池中的线程轮流将请求出列并处理它们。

    您可以在此处找到有关 asp.net 如何处理此问题的更多信息:http://www.codeproject.com/Articles/38501/Multi-Threading-in-ASP-NET

    编辑

    但是,您应该将 CPU/IO 密集型工作负载推迟到其他线程(最好使用 TPL),以便由 asp.net 管理的线程保持响应。

    警告:如果您在处理请求时确实产生了新线程,请确保它们在从“REST 方法”返回之前全部完成。您可能会想“我会尽快返回给用户,并在后台留下一个线程将内容保存到数据库中。”这很危险,主要是因为应用程序池可能会被回收,从而中止您的后台线程。在这里阅读更多:http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

    在所有线程完成之前不要返回。

    【讨论】:

      【解决方案2】:

      正如 dcastro 所说,通常您无需担心请求会相互干扰。

      但是,如果您使用诸如全局变量或单实例类之类的东西,那么您很可能会遇到线程问题。远离那些东西,你会没事的。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多