using System; using System.Collections.Concurrent; namespace LeafWeb.Core.Utility { public static class Memoizer { public static Func ThreadsafeMemoize(Func f) { var cache = new ConcurrentDictionary(); return argument => cache.GetOrAdd(argument, f); } public static Func ThreadsafeMemoize(Func f) { var cache = new ConcurrentDictionary, R>(); return (a1, a2) => cache.GetOrAdd(Tuple.Create(a1, a2), t => f(t.Item1, t.Item2)); } } }