使用AJAX,我是否需要关心ASP.NET中的线程安全性?

时间:2010-12-17 10:46:57

标签: .net asp.net ajax multithreading locking

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

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

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

2 个答案:

答案 0 :(得分:3)

ASP.NET通常每个请求使用一个线程。它可以使用多个线程,例如在提供asynchronous pages时,即使这样,在任何给定时间只有一个线程将处理该请求。

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

  

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

答案 1 :(得分:2)

  

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

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

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