为什么Visual Studio Watch窗口显示'评估超时'对于任何进入ReaderWriterSlimLock的属性?
要重现此问题,请运行以下程序,暂停它并在Watch窗口中输入Form1.form.Prop。
在现实世界的应用程序中,一旦评估超时'出现在Watch窗口中,其他代码无法再进入锁定状态。
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;
namespace LockTest
{
public partial class Form1 : Form
{
private ReaderWriterLockSlim readerWriterLock = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion);
private static Form1 form;
public int Prop
{
get
{
readerWriterLock.EnterReadLock();
readerWriterLock.ExitReadLock();
return 1;
}
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
form = this;
}
}
}
答案 0 :(得分:1)
我想这是因为线程可以 而不是 在调用非托管代码时获取此锁定,如果您只是单击就会发生这种情况调试器的暂停按钮。
同步机制将挂起,直到该线程重新进入托管环境。因此,这可以解释暂停时EnterReadLock
的超时时间 - 而不是F10
。