Exemple #1
0
        /// <nodoc />
        public ResourcePool(Context context, ResourcePoolConfiguration configuration, Func <TKey, TObject> resourceFactory, IClock?clock = null)
        {
            _context       = context;
            _configuration = configuration;
            _clock         = clock ?? SystemClock.Instance;

            // We need to allow for one more resource to be alive at any given time
            _resourceDict    = new Dictionary <TKey, ResourceWrapper <TObject> >(_configuration.MaximumResourceCount + 1);
            _resourceFactory = resourceFactory;
        }
        /// <nodoc />
        public static ResourcePoolConfiguration FromDistributedContentSettings(DistributedContentSettings dcs)
        {
            var resourcePoolConfiguration = new ResourcePoolConfiguration();

            ApplyIfNotNull(dcs.MaxGrpcClientCount, v => resourcePoolConfiguration.MaximumResourceCount = v);
            ApplyIfNotNull(dcs.MaxGrpcClientAgeMinutes, v => resourcePoolConfiguration.MaximumAge      = TimeSpan.FromMinutes(v));
            ApplyIfNotNull(dcs.GrpcCopyClientCacheGarbageCollectionPeriodMinutes, v => resourcePoolConfiguration.GarbageCollectionPeriod = TimeSpan.FromMinutes(v));

            return(resourcePoolConfiguration);
        }
        /// <nodoc />
        public ResourcePoolV2(Context context, ResourcePoolConfiguration configuration, Func <TKey, TObject> resourceFactory, IClock?clock = null)
        {
            _context       = context;
            _configuration = configuration;
            _clock         = clock ?? SystemClock.Instance;

            _resources = new Dictionary <TKey, ResourceWrapperV2 <TObject> >();
            _factory   = resourceFactory;

            if (_configuration.GarbageCollectionPeriod != Timeout.InfiniteTimeSpan)
            {
                _gcTask = Task.Run(() => BackgroundGarbageCollectAsync(_disposeCancellationTokenSource.Token));
            }
            else
            {
                _gcTask = Task.CompletedTask;
            }
        }