예제 #1
0
        private IEnumerable <string> runCommandAndCacheResult <T>(T arguments,
                                                                  SelfCleanUpDictionary <T, IEnumerable <string> > cache)
        {
            if (_isDisposed)
            {
                return(null);
            }

            if (cache.TryGetValue(arguments, out IEnumerable <string> value))
            {
                return(value);
            }

            if (!((dynamic)arguments).IsValid())
            {
                return(null);
            }

            IEnumerable <string> result = (IEnumerable <string>)runCommand((dynamic)arguments);

            if (result != null)
            {
                cache.Add(arguments, result);
            }
            return(result);
        }
예제 #2
0
        async private Task runCommandAndCacheResultAsync <T>(T arguments,
                                                             SelfCleanUpDictionary <T, IEnumerable <string> > cache)
        {
            if (_isDisposed || cache.ContainsKey(arguments) || !((dynamic)arguments).IsValid())
            {
                return;
            }

            IEnumerable <string> result = (IEnumerable <string>)(await runCommandAsync((dynamic)arguments));

            if (result == null || cache.ContainsKey(arguments))
            {
                return;
            }
            cache.Add(arguments, result);
        }