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(); } } }
/// <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(); } } }