private RuleResult RuleApplyCached(ILineRule rule, int index, string line) { RuleResult result; ConcurrentDictionary <int, RuleResult> results; if (CachedResults.ContainsKey(rule)) { results = CachedResults[rule]; if (results.ContainsKey(index)) { return(results[index]); } } else { results = new ConcurrentDictionary <int, RuleResult>(); CachedResults.AddOrUpdate(rule, results, (ru, rs) => rs); } result = rule.Apply(line); results.AddOrUpdate(index, result, (i, r) => r); return(result); }
private RuleResult RuleApplyCached(ILineRule rule, int index, string line) { RuleResult result; ConcurrentDictionary<int, RuleResult> results; if(CachedResults.ContainsKey(rule)) { results = CachedResults[rule]; if(results.ContainsKey(index)) return results[index]; } else { results = new ConcurrentDictionary<int, RuleResult>(); CachedResults.AddOrUpdate(rule, results, (ru, rs) => rs); } result = rule.Apply(line); results.AddOrUpdate(index, result, (i, r) => r); return result; }