예제 #1
0
        public void Dispose_FaultsAwaiters()
        {
            var turnstile = new Turnstile();

            using (var cts = new CancellationTokenSource())
            {
                var awaiters = new[]
                {
                    turnstile.WaitAsync(),
                    turnstile.WaitAsync(cts.Token),
                    turnstile.WaitAsync(),
                    turnstile.WaitAsync()
                };

                cts.Cancel();
                turnstile.Dispose();

                TaskAssert.Faulted <ObjectDisposedException>(awaiters[0]);
                TaskAssert.Cancelled(awaiters[1]);

                foreach (var awaiter in awaiters.Skip(2))
                {
                    TaskAssert.Faulted <ObjectDisposedException>(awaiter);
                }
            }
        }
예제 #2
0
        public void WaitAsync_Disposed_ThrowsObjectDisposedException()
        {
            var turnstile = new Turnstile();

            turnstile.Dispose();

            TaskAssert.Faulted <ObjectDisposedException>(turnstile.WaitAsync());
        }
예제 #3
0
        /// <inheritdoc />
        protected override void Dispose(bool ADisposing)
        {
            if (ADisposing)
            {
                // Fault all remaining awaiters.
                FWaiting.Dispose();
            }

            base.Dispose(ADisposing);
        }