private static async Task <T> GetOrAddAsync <T>(
            ObjectCache cache, string key, CacheItemPolicy policy, Func <Task <T> > valueFactory)
        {
            var newEntry = new LazyTask <T>(valueFactory);

            if (cache.AddOrGetExisting(key, newEntry, policy) is LazyTask <T> existingEntry)
            {
                return(await existingEntry.Value);
            }

            try
            {
                Task <T> result = newEntry.Value;

                if (result.IsCanceled || result.IsFaulted)
                {
                    cache.Remove(key);
                }

                return(await result);
            }
            catch
            {
                cache.Remove(key);
                throw;
            }
        }
 public async Task <bool> Validate()
 {
     return(await Conditions.AllFalseAsync(
                LazyTask <bool> .Create(() => Task.FromResult(false)).Get(),
                LazyTask <bool> .Create(async() => await ValidateSomenthing()).Get(),
                LazyTask <bool> .Create(async() => await ValidateAnoterThing()).Get()
                ));
 }
Exemple #3
0
        IEnumerator Work()
        {
            var t1 = Observable.Interval(TimeSpan.FromSeconds(1)).Take(4).ToLazyTask();
            var t2 = Observable.Interval(TimeSpan.FromSeconds(1)).Select(x => x * x).Take(4).ToLazyTask();
            var t3 = Observable.Throw <Unit>(new Exception()).ToLazyTask();

            yield return(LazyTask.WhenAll(t1, t2, t3));

            logger.Debug(t1.Result + ":" + t2.Result);
            logger.Debug(t3.Exception);
        }