/// <summary> /// Instantiates the <see cref="DiskStorageCache"/>. /// </summary> public DiskStorageCache( IDiskStorage diskStorage, IEntryEvictionComparatorSupplier entryEvictionComparatorSupplier, Params parameters, ICacheEventListener cacheEventListener, ICacheErrorLogger cacheErrorLogger, IDiskTrimmableRegistry diskTrimmableRegistry, bool indexPopulateAtStartupEnabled, Clock clock = null) { _lowDiskSpaceCacheSizeLimit = parameters.LowDiskSpaceCacheSizeLimit; _defaultCacheSizeLimit = parameters.DefaultCacheSizeLimit; _cacheSizeLimit = parameters.DefaultCacheSizeLimit; _statFsHelper = StatFsHelper.Instance; _storage = diskStorage; _entryEvictionComparatorSupplier = entryEvictionComparatorSupplier; _cacheSizeLastUpdateTime = default(DateTime); _cacheEventListener = cacheEventListener; _cacheSizeLimitMinimum = parameters.CacheSizeLimitMinimum; _cacheErrorLogger = cacheErrorLogger; _cacheStats = new CacheStats(); if (diskTrimmableRegistry != null) { diskTrimmableRegistry.RegisterDiskTrimmable(this); } _clock = clock ?? SystemClock.Get(); _indexPopulateAtStartupEnabled = indexPopulateAtStartupEnabled; _resourceIndex = new HashSet <string>(); if (_indexPopulateAtStartupEnabled) { Task.Run(() => { try { lock (_lock) { MaybeUpdateFileCacheSize(); } } finally { _countdownEvent.Signal(); } }); } else { _countdownEvent.Reset(0); } }