C# 线程一直挂起,直到我附加了调试器

C# 线程一直挂起,直到我附加了调试器,c#,multithreading,wcf,C#,Multithreading,Wcf,我有一个使用WCF的服务。在内部,它有一个包含列表的字典,您可以将这些列表添加到不同端点或从不同端点获取其子集 代码如下所示: List<Data> list = null; try { locker.EnterReadLock(); list = internalData[Something].Where(x => x.hassomething()).ToList();

我有一个使用WCF的服务。在内部,它有一个包含列表的字典,您可以将这些列表添加到不同端点或从不同端点获取其子集

代码如下所示:

        List<Data> list = null;
        try
        {
            locker.EnterReadLock();
            list = internalData[Something].Where(x => x.hassomething()).ToList();
        }
        finally
        {
            locker.ExitReadLock();
        }

        foreach (var y in list)
        {
            result[y.proprty1].Add(y.property2); // <-- here it hangs
        }

        return result;
List=null;
尝试
{
locker.EnterReadLock();
list=internalData[Something]。其中(x=>x.hassomething()).ToList();
}
最后
{
locker.exitradlock();
}
foreach(列表中的变量y)
{

结果[y.property1].Add(y.property2);//我将锁更改为lock(something){code…},挂起的问题消失了。因此,我似乎遇到了Steffen Winkler在评论中指出的问题。

第三段读起来有点像你所描述的。(100%CPU占用).您不使用
lock(internalData[Something])的具体原因是什么
?我读的比写的多得多,所以我希望不止一个读者同时阅读,而不是仅仅锁定。请查看您的链接嗯,当您从该列表中阅读时,是否有可能另一个线程会向该列表中添加内容?因为只要您不向列表中添加/删除内容,您就不需要锁定它。如果y如果您同时在不同线程中读写同一个列表,那么最好使用oh后续问题中的内容:当附加了调试器时,您是否能够重现此问题?这意味着如果您在Visual Studio中启动程序并让其运行,它是否也会在某个点锁定?另一个问题是ndpoint正在对列表进行更改,因此我需要锁定。该问题在visual studio中不可再现,并且在生产服务器上间歇性发生。我已更改为另一个锁定,并将查看它是否是读取器内部的异常,正如您在第一条注释的链接中指出的