【问题标题】:Is MVC4 Action Is Thread Safely?MVC 4 动作是线程安全的吗?
【发布时间】:2014-03-22 22:18:07
【问题描述】:

我正在使用 asp.net mvc4,但是我有一个关于 Action 的问题,Action 是 Thread 安全吗?我的意思是当 2 个请求到来时,是否有可能 1 个请求正在处理但未完成,第二个请求开始处理?

或者如果它是线程安全的,等待完成一个请求和另一个请求?

谢谢。

更新1:

看起来它不是线程安全的。我对控制器有一个动作。在action 5方法中已经执行。 (1,2,3,4,5)。有 3 个请求一起出现(A,B,C)。

还有我的日志显示,这些执行顺序:

A-1 B-1 C-1 A-2 A-3 B-2 B-3 B-4 B-5 C-4 C-5 A-2 A-3 A-4 A-5

因为我需要检查1个方法的数据,如果没有找到数据,我会 写在方法5上。如果执行不使用线程安全,它会写3 数据。(因为方法1上所有未找到数据,也都没有等待完成 一起……)

更新2:

也许我对线程安全感到困惑,但感谢朋友的帮助。

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    是否可能第一个请求是句柄但未完成,第二个请求开始句柄?

    当然,否则您的网站一次只能有效地处理一个页面视图。

    您必须使 您的代码 线程安全。例如,请参阅 how to lock an asp.net mvc action?,或者您可以在数据库中创建一个锁,您的代码必须查询该锁。

    【讨论】:

    • 如果它不会完成并启动另一个,为什么有些人仍然说它是线程安全的?
    • 因为controller instances are thread-safe,这意味着你可以使用不受其他请求影响的私有变量(除非它们是静态的)。因此,虽然MVC 框架本身 承诺是线程安全的,但对于您编写的任何代码,您必须确定并保护它。
    • 那么,还有一个问题:如果我使用锁来处理我当前的问题,是否存在性能问题?
    • 它将确保只有一个用户可以使用该锁执行对操作的请求,这取决于用户数量和请求的实际处理时间可能会成为问题。跨度>
    • @qakmak if it will not finish and start another, Why some people still say it's thread safe? 你的措辞让我觉得你不明白thread safety 到底是什么。
    【解决方案2】:

    在 ASP.NET 中,控制器实例为 thread-safe,因为将为每个请求创建新的控制器实例。所以并发调用不会相互交互。

    但是StaticShared 资源不是thread-safe

    【讨论】:

    • 你的意思是2个请求访问动作同时执行,不会同时执行(当其中一个执行到中间时,更改为另一个开始执行)对吗?
    • 每个请求都会创建一个新的控制器实例,并且动作在控​​制器内部。所以并发调用不会交互。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2015-04-18
    • 2011-10-07
    • 2012-03-02
    • 2011-10-28
    • 2023-03-14
    相关资源
    最近更新 更多