Exemplo n.º 1
0
        public void TestDisposeInterruptWaiting()
        {
            using (var inst = new MutuallyExclusivePrimitive())
            {
                var task = Task.Run(() =>
                {
                    Thread.Sleep(50);
                    inst.Dispose();
                });


                try
                {
                    using (var guard = inst.EnterBackground(60000, default(CancellationToken)))
                    {
                    }
                }
                finally
                {
                    task.Wait();
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Clean-up all resources
        /// </summary>
        /// <param name="isUserCall">Was called by user</param>
        protected override void Dispose(bool isUserCall)
        {
            if (!_isDisposed)
            {
                _isDisposed = true;

                if (_backgroundTransferer != null)
                {
                    _backgroundTransferer.Stop(waitForStop: true);
                }

                _addMonitor.Dispose();
                _takeMonitor.Dispose();
                _peekMonitor.Dispose();

                _lowLevelQueue.Dispose();
                _highLevelQueue.Dispose();

                if (_backgoundTransfererExclusive != null)
                {
                    _backgoundTransfererExclusive.Dispose();
                }
            }
        }