Exemplo n.º 1
0
        public void WhenClosed_Open()
        {
            var gate = new AsyncGate();

            gate.Open();

            ShouldBeOpen(gate);
        }
Exemplo n.º 2
0
        public void WhenOpen_Open()
        {
            var gate = new AsyncGate(open: true);

            gate.Open();

            ShouldBeOpen(gate);
        }
Exemplo n.º 3
0
        public void Stampede()
        {
            var gate = new AsyncGate();

            var herd = Enumerable
                       .Range(0, Environment.ProcessorCount * 32)
                       .Select(_ => Task.Run(async() =>
            {
                await gate.WaitAsync();
            }))
                       .ToList();

            gate.Open();

            Task.WhenAll(herd);
        }
Exemplo n.º 4
0
        public void OnOpeningWhenTasksAreWaiting()
        {
            var gate = new AsyncGate();
            var sign = 0;

            var task = Task.Run(async() =>
            {
                sign = 1;
                await gate.WaitAsync();
                sign = 2;
            });

            WaitUntil(() => sign == 1, 100.Milliseconds());

            gate.Open();

            WaitUntil(() => sign == 2, 100.Milliseconds());

            task.Wait(100.Milliseconds()).Should().BeTrue();
        }