班长.Wait timeout永远不会超时



所以我使用Monitor进行了一个简单的测试。设置超时时间,等待3秒。我的理解是,当时间到期时,一个虚拟脉冲被发送到监视器来释放等待。然而,在我的测试中,这种情况似乎从未发生过。有人能解释一下这是怎么回事吗?下面是我的测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace BlockingMethodFoo
{
    class Program
    {
        static void Main(string[] args)
        {
            WaitFoo foo = new WaitFoo();
            foo.StartMethod();
            Console.WriteLine("Done. Press enter");
            Console.ReadLine();
        }
    }
    public class WaitFoo
    {
        private object _waitObj = new object();
        private string _message = string.Empty;
        public void StartMethod()
        {
            Thread waitThread = new Thread(new ThreadStart(new Action(() => { WaitMethod(); })));
            _message = string.Empty;
            Console.WriteLine("Starting wait");
            _message = "Time Out";
            lock (_waitObj)
            {
                waitThread.Start();
                Monitor.Wait(_waitObj, TimeSpan.FromSeconds(3));
            }
            Console.WriteLine(_message);
        }
        private void WaitMethod()
        {
            lock (_waitObj)
            {
                _message = Console.ReadLine();
                Monitor.Pulse(_waitObj);
            }
        }
    }
}

Monitor.Wait将返回false,如果超时而无法获得锁。

http://msdn.microsoft.com/en-us/library/tdc87f8y.aspx

您必须检查Monitor.Wait的返回,例如,如果您认为合适,则抛出TimeOutException

相关内容

  • 没有找到相关文章

最新更新