在属性中使用ReaderWriterSlimLock时监视窗口超时

时间:2017-02-02 12:39:18

标签: c# properties locking deadlock watch

为什么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;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我想这是因为线程可以 而不是 在调用非托管代码时获取此锁定,如果您只是单击就会发生这种情况调试器的暂停按钮。

同步机制将挂起,直到该线程重新进入托管环境。因此,这可以解释暂停时EnterReadLock的超时时间 - 而不是F10