putIfAbsent method
Associates the specified key
with the given value
if not already associated with a value.
key
: key with which the specified value is to be associatedvalue
: value to be associated with the specified keydelegate
: provides the caller a way of changing the CacheEntry before persistence
Returns true
if a value was set.
Implementation
@override
Future<bool> putIfAbsent(String key, T value,
{CacheEntryDelegate<T>? delegate}) {
// #region Statistics
Stopwatch? watch;
Future<bool> Function(bool ok) posPut = (bool ok) => Future<bool>.value(ok);
if (statsEnabled) {
watch = clock.stopwatch()..start();
posPut = (bool ok) {
if (ok) {
stats.increasePuts();
}
if (watch != null) {
stats.addPutTime(watch.elapsedMicroseconds);
watch.stop();
}
return Future<bool>.value(ok);
};
}
// #endregion
return _secondary
.putIfAbsent(key, value, delegate: delegate)
.then((_) => _primary.putIfAbsent(key, value, delegate: delegate))
.then(posPut);
}