public Dispatcher Get(DispatcherKey key, DispatcherFactory factory) { Dispatcher dispatcher; if (!_cache.TryGetValue(key, out dispatcher)) { lock (_cache) { if (!_cache.TryGetValue(key, out dispatcher)) { dispatcher = factory(); _cache.Add(key, dispatcher); } } } return dispatcher; }