Exemple #1
0
        public void Monitor_WaitTest()
        {
            var obj       = new object();
            var waitTests =
                new Func <bool>[]
            {
                () => Monitor.Wait(obj, FailTimeoutMilliseconds),
                () => Monitor.Wait(obj, FailTimeoutMilliseconds),
                () => Monitor.Wait(obj, TimeSpan.FromMilliseconds(FailTimeoutMilliseconds)),
                () => Monitor.Wait(obj, TimeSpan.FromMilliseconds(FailTimeoutMilliseconds)),
            };

            var t =
                new Thread(() =>
            {
                Monitor.Enter(obj);
                for (int i = 0; i < waitTests.Length; ++i)
                {
                    Monitor.Pulse(obj);
                    Monitor.Wait(obj, FailTimeoutMilliseconds);
                }
                Monitor.Exit(obj);
            });

            t.IsBackground = true;

            Monitor.Enter(obj);
            t.Start();
            foreach (var waitTest in waitTests)
            {
                Assert.IsTrue(waitTest());
                Monitor.Pulse(obj);
            }
            Monitor.Exit(obj);
        }
Exemple #2
0
        public void Monitor_Wait_Invalid()
        {
            var obj = new object();

            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.Wait(null));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.Wait(null, 1));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.Wait(null, TimeSpan.Zero));
            //AssertExtensions.Throws<ArgumentOutOfRangeException>("millisecondsTimeout", () => Monitor.Wait(null, -1));
            //AssertExtensions.Throws<ArgumentOutOfRangeException>("timeout", () => Monitor.Wait(null, TimeSpan.FromMilliseconds(-1)));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.Wait(null, -1));
            AssertExtensions.Throws <ArgumentNullException>("obj", () => Monitor.Wait(null, TimeSpan.FromMilliseconds(-1)));
        }