GSF.Diagnostics.LoggerInternal.CalculateRoutingTable C# (CSharp) Method

CalculateRoutingTable() private method

Recalculates the entire routing table on a separate thread.
private CalculateRoutingTable ( object sender, EventArgs e ) : void
sender object
e EventArgs
return void
        private void CalculateRoutingTable(object sender, EventArgs<ScheduledTaskRunningReason> e)
        {
            lock (m_syncRoot)
            {
                //Some other thread won on the race condition.
                if (RoutingTablesValid)
                    return;

                var subscribers = new List<LogSubscriberInternal>(m_subscribers.Count);
                m_subscribers.RemoveWhere(x =>
                    {
                        LogSubscriberInternal subscriber = (LogSubscriberInternal)x.Target;
                        if (subscriber != null)
                        {
                            subscribers.Add(subscriber);
                            return false;
                        }
                        return true;
                    });

                foreach (var pub in m_allPublishers)
                {
                    CalculateRoutingTableForPublisherSync(subscribers, pub);
                }
                RoutingTablesValid = true;
            }
        }