private T GetOrCreateTopic <T>(string name) { using (var @rlock = m_lockScope.Reader(Timeout)) { if ([email protected]) { throw new TimeoutException("Get topic has timed out"); } T value; if (!DictionaryHelper.TryGetValue <T>(m_catalog, name, out value)) { using (var @wlock = m_lockScope.UpgradeToWriter(Timeout)) { if ([email protected]) { throw new TimeoutException("Create topic has timed out"); } value = (T)Activator.CreateInstance(typeof(T), name); m_catalog[name] = value; } } return(value); } }
protected void InnerPublish(params object[] args) { if (g_traceInfo.IsVerboseEnabled) { var publisherName = GetPublisherName(GetType()); TraceHelper.TraceVerbose(g_traceInfo, "{0} - Publishing by '{1}' of '{2}'", Name, publisherName.Second, publisherName.First); } using (var @lock = m_lockScope.Reader(Timeout)) { if ([email protected]) { throw new TimeoutException("Unsubscribe has timed out"); } foreach (var pair in m_subscribers) { var subscriber = pair.First; if (g_traceInfo.IsVerboseEnabled) { var subscriberName = GetSubscriberName(subscriber); TraceHelper.TraceVerbose(g_traceInfo, "{0} - Invoking '{1}' for '{2}'", Name, subscriberName.Second, subscriberName.First); } var strategy = pair.Second; strategy.Invoke(subscriber, args); } } }
public override T Take(object state) { T item = state as T; using (var @rlock = m_lockScope.Reader(m_timeout)) { if ([email protected]) { if (g_traceInfo.IsWarningEnabled) { TraceHelper.TraceWarning(g_traceInfo, "{0} - Take timed out", Name); } return(default(T)); } if (item != null) { using (var @wlock = m_lockScope.UpgradeToWriter(m_timeout)) { if ([email protected]) { if (g_traceInfo.IsWarningEnabled) { TraceHelper.TraceWarning(g_traceInfo, "{0} - Take timed out on remove", Name); } return(default(T)); } if (!Remove(item)) { if (g_traceInfo.IsWarningEnabled) { TraceHelper.TraceWarning(g_traceInfo, "{0} - Failed to remove", Name); } return(default(T)); } } } else { item = Lookup(state); } } return(item); }