public void Dispose() { _cleaner.Dispose(); //AggregateExceptionBuilder builder = new AggregateExceptionBuilder("Error while disposing the DataManager"); //_cleaner.Stop(); //var keys = _map.Keys; //var retries = 3; //for(var i=0;i<keys.Length;i++) //{ // var key = keys[i]; // var count = (_map[key].Provider as ContextProviderBase).ConsumerCount; // var canRemove = false; // if (count > 0) // { // switch (KPolicy.ManagerDisposeStrategy) // { // case ManagerDisposalStrategy.Default: // case ManagerDisposalStrategy.DisposeButThrowIfInUse: // builder.Add(new Exception($"Provider for thread {key} has {count} consumer(s)")); // canRemove = true; // break; // case ManagerDisposalStrategy.FailIfNotDisposed: // throw new Exception($"Context on thread {key} is still in use by {count} repositories"); // case ManagerDisposalStrategy.RetryUntilDisposedOrFail: // Thread.Sleep(Convert.ToInt32(KPolicy.DisposalWait.TotalMilliseconds)); // i--; //Retry // retries--; // if (retries == 0) // throw new Exception($"Context on thread {key} is still in use by {count} repositories"); // break; // case ManagerDisposalStrategy.DisposeSilentlyEvenIfInUse: // canRemove = true; // break; // } // } // else // canRemove = true; // if (canRemove) { // (_map.Remove(key) as IDisposable).Dispose(); // retries = KPolicy.RetryCount; // } //} //if (builder.HasErrors) // throw builder.ToAggregateException(); }