这可能是两个问题,我在每个请求中使用一个EF上下文,但我想在每个线程中使用一个,因为我将在请求期间在另一个线程中创建一些复杂的任务。
那么,这样安全吗?如果答案是肯定的,怎么做?如何在线程中存储对象并将其取回?
提前谢谢。
答案 0 :(得分:3)
只有完全控制线程才安全。这意味着你必须创建线程,线程必须在完成工作后死亡。如果使用线程池来查询工作,则不得使用每个线程的上下文。线程池用于例如服务ASP.NET,ASP.NET MVC或WCF请求的线程。 Context不是线程安全的,所以不要在线程之间共享它。
要为每个帖子存储内容,请使用static
变量并将其标记为ThreadStaticAttribute
。
答案 1 :(得分:1)
我会将EF上下文的范围限制为特定的工作单元在请求级别。
如果您的工作单元通过各种方式与请求无关,则可以为此生成新线程并使用新的EF上下文,只需在完成该工作单元后将其丢弃即可。请注意,EF上下文不是线程安全的,即您不能在多个线程中使用相同的上下文。