Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 与实体框架的僵局&;林克_Multithreading_Linq_Entity Framework_Deadlock_Typedescriptor - Fatal编程技术网

Multithreading 与实体框架的僵局&;林克

Multithreading 与实体框架的僵局&;林克,multithreading,linq,entity-framework,deadlock,typedescriptor,Multithreading,Linq,Entity Framework,Deadlock,Typedescriptor,我有一个asp.net/mvc 3/entity framework 4.1 web应用程序,它访问类库以获取查找表数据。当我第一次访问该网站并尝试同时加载两个不同的页面时,应用程序池挂起。数据库中没有死锁或任何活动。我使用windbg/vs2010调试器查找线程锁。两个线程在System.Component.TypeDescriptor上锁定 执行卡在lookuptable.ToList 代码: 并行堆栈映像: 感谢您的帮助您是否有自己的锁,或者您是否在线程之间共享上下文?为什么要使用事务

我有一个asp.net/mvc 3/entity framework 4.1 web应用程序,它访问类库以获取查找表数据。当我第一次访问该网站并尝试同时加载两个不同的页面时,应用程序池挂起。数据库中没有死锁或任何活动。我使用windbg/vs2010调试器查找线程锁。两个线程在
System.Component.TypeDescriptor上锁定

执行卡在
lookuptable.ToList
代码:

并行堆栈映像:


感谢您的帮助

您是否有自己的锁,或者您是否在线程之间共享上下文?为什么要使用事务进行简单读取?除了任何设计问题(如果是查找,您可以缓存它以避免进一步读取),如果您必须(出于任何原因)在线程之间共享上下文,您应该像对待任何其他必须/不能并行执行的资源一样对待它。另外,使用transaction.complete()完成启动的事务;似乎是@user2244625中相同死锁的重复。请参见此处的MS Connect bug(投票+重新创建投票):和此处的EF问题:
   Using transaction As New TransactionScope(TransactionScopeOption.RequiresNew, 
            New TransactionOptions() With 
              {.IsolationLevel = IsolationLevel.ReadUncommitted})
            Using db As New Entity
              Dim lookuptable = From lk In db.LookUpTable Where lk.Id = pId Select lk
               returnValue = lookuptable.ToList
            End Using
    End Using