Beispiel #1
0
        private async Task <TValue> FetchAndAddToCache <TValue>(
            string key,
            Func <string, Task <TValue> > fetchFactory)
        {
            using (await _cacheLock.LockAsync(key).ConfigureAwait(false))
            {
                var result = await Provider.TryGet <TValue>(key).ConfigureAwait(false);

                if (result.Succeeded)
                {
                    return(result.Value);
                }

                TValue value = await fetchFactory(key).ConfigureAwait(false);

                await Provider.Set(key, value).ConfigureAwait(false);

                return(value);
            }
        }