Esempio n. 1
0
        public async Task WaitsIfNoSpaceAvailible()
        {
            using var s = new SemaphoreWrapper(1);
            await s.EnterQueue().OrTimeout();

            var waitingTask = s.EnterQueue();

            Assert.False(waitingTask.IsCompleted);

            s.LeaveQueue();
            await waitingTask.OrTimeout();
        }
Esempio n. 2
0
        public void DoesNotWaitIfSpaceAvailible()
        {
            using var s = new SemaphoreWrapper(2);

            var t1 = s.EnterQueue();

            Assert.True(t1.IsCompleted);

            var t2 = s.EnterQueue();

            Assert.True(t2.IsCompleted);

            var t3 = s.EnterQueue();

            Assert.False(t3.IsCompleted);
        }
Esempio n. 3
0
        public async Task IsEncapsulated()
        {
            using var s1 = new SemaphoreWrapper(1);
            using var s2 = new SemaphoreWrapper(1);

            await s1.EnterQueue().OrTimeout();

            await s2.EnterQueue().OrTimeout();
        }
Esempio n. 4
0
        public async Task TracksQueueLength()
        {
            using var s = new SemaphoreWrapper(1);
            Assert.Equal(1, s.Count);

            await s.EnterQueue().OrTimeout();

            Assert.Equal(0, s.Count);

            s.LeaveQueue();
            Assert.Equal(1, s.Count);
        }