在ASP.NET中的线程静态变量中存储ObjectContext是否安全?

时间:2009-11-23 18:42:59

标签: .net asp.net entity-framework thread-safety mef

我已经读过,我应该在ObjectContext中存储HttpContext.Current,以便在请求中调用的不同服务/存储库之间共享我的ObjectContext。我想知道在ObjectContext类变量上使用带有[ThreadStatic]属性的static是否安全。这样做是否安全?每个请求都是在自己的线程中处理的吗?

2 个答案:

答案 0 :(得分:8)

不,同一个线程中可能有多个请求,更重要的是,一个请求可以在多个线程中处理。这称为线程敏捷性,当您将内容存储在线程静态变量而不是Context中时,您将遇到问题:当ASP.NET在同一请求中从一个线程移动到另一个线程时 ,仍然可以访问HttpContext,但是线程静态变量不是。

一些链接有更多信息:

答案 1 :(得分:3)

单个线程用于处理请求,在现有请求完成之前,其他任何请求都不会使用该线程。但是,您需要考虑如何确保上下文对象中的项目即使在发生异常情况时也要处理掉。一旦线程完成了对任何理由的请求,它将被重新用于处理其他请求。您不希望先前请求中的状态泄漏到下一个请求中。