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); }
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); }