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