【发布时间】:2010-12-17 10:46:57
【问题描述】:
问题是,是否有可能从多个线程执行同一会话的请求? ASP.NET 中的方法是可重入的吗?特别是我们使用 AJAX,这意味着异步请求正在发生。
这是否意味着对放置在会话内的对象的操作进行锁定?
我知道在处理静态变量和应用程序范围的变量时,锁是必不可少的,但问题是会话对象也一样吗?
【问题讨论】:
标签: .net asp.net ajax multithreading locking
问题是,是否有可能从多个线程执行同一会话的请求? ASP.NET 中的方法是可重入的吗?特别是我们使用 AJAX,这意味着异步请求正在发生。
这是否意味着对放置在会话内的对象的操作进行锁定?
我知道在处理静态变量和应用程序范围的变量时,锁是必不可少的,但问题是会话对象也一样吗?
【问题讨论】:
标签: .net asp.net ajax multithreading locking
ASP.NET 通常每个请求使用一个线程。它可以使用多个线程,例如在为asynchronous pages 提供服务时,但即便如此,在任何给定时间也只有一个线程会处理请求。
但是,从多个线程使用会话状态是安全的,因为对会话对象的访问是序列化的。来自MSDN:
如果其他页面尝试 同时访问会话状态? 在这种情况下,当前请求 最终可能会在不一致的情况下工作 数据或不是最新的数据。 只是为了避免这种情况,会话状态 模块实现读取器/写入器 锁定机制和排队 访问状态值。一个页面 具有会话状态写访问权限 在会话上持有作家锁 直到请求终止。
【讨论】:
问题是,同一个会话的请求是否有可能从多个线程执行?
如果您在页面中使用 HTTP 会话,则对同一会话的请求将由 ASP.NET 引擎排队。它们永远不会并行运行。因此,例如,如果您向某个使用会话的 ASP.NET 页面发送多个 AJAX 请求,这些请求将按顺序执行。
如果不使用 Session,那么多个并发请求将并行运行。
【讨论】: