【问题标题】:Do I need to care about thread-safety in ASP.NET with AJAX?我需要关心带有 AJAX 的 ASP.NET 中的线程安全吗?
【发布时间】:2010-12-17 10:46:57
【问题描述】:

问题是,是否有可能从多个线程执行同一会话的请求? ASP.NET 中的方法是可重入的吗?特别是我们使用 AJAX,这意味着异步请求正在发生。

这是否意味着对放置在会话内的对象的操作进行锁定?

我知道在处理静态变量和应用程序范围的变量时,锁是必不可少的,但问题是会话对象也一样吗?

【问题讨论】:

    标签: .net asp.net ajax multithreading locking


    【解决方案1】:

    ASP.NET 通常每个请求使用一个线程。它可以使用多个线程,例如在为asynchronous pages 提供服务时,但即便如此,在任何给定时间也只有一个线程会处理请求。

    但是,从多个线程使用会话状态是安全的,因为对会话对象的访问是序列化的。来自MSDN

    如果其他页面尝试 同时访问会话状态? 在这种情况下,当前请求 最终可能会在不一致的情况下工作 数据或不是最新的数据。 只是为了避免这种情况,会话状态 模块实现读取器/写入器 锁定机制和排队 访问状态值。一个页面 具有会话状态写访问权限 在会话上持有作家锁 直到请求终止。

    【讨论】:

    • 我不太同意 ASP.NET 每个请求使用一个线程,无论是否异步。如果您使用asynchronous pages,则情况并非如此。
    • 您提供的链接适用于 ASP,而不是 ASP.Net。我不知道这篇文章是否也适用于 ASP.Net。
    【解决方案2】:

    问题是,同一个会话的请求是否有可能从多个线程执行?

    如果您在页面中使用 HTTP 会话,则对同一会话的请求将由 ASP.NET 引擎排队。它们永远不会并行运行。因此,例如,如果您向某个使用会话的 ASP.NET 页面发送多个 AJAX 请求,这些请求将按顺序执行。

    如果不使用 Session,那么多个并发请求将并行运行。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 2010-11-06
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多