我知道接受的做法是在工作单元模式中使用DataContext,但我从MSDN中看到了这个声明:
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
当我读到它时,如果DataContext被声明为静态,则它是线程安全的。
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx
答案 0 :(得分:6)
不,那是不正确。
这就是说DataContext
的静态成员本身是线程安全的 - 而不是它的静态实例。
请注意,这几乎是.NET中大多数类的标准。 (允许就“最”的含义存在分歧)。我没有立即知道DataContext
的任何静态成员。
答案 1 :(得分:1)
恰恰相反。
实例成员不是线程安全的。但是您将从同一个共享实例访问实例成员。
但即使该对象是线程安全的,也要考虑一个不断增长的第一级缓存对长期数据上下文的影响。几个线程和几十个/多个/数千个并发调用和您的实例可能会耗尽内存。相反,你应该在它完成工作后处理它。