private void RunUpdate(UpdateNode <TTrigger> node, UpdateChain chain)
        {
            var triggers = chain.CurrentTriggers;

            triggers.Clear();
            triggers.UnionWith(node.IncommingTriggers);
            triggers.IntersectWith(TriggeredUpdatesSinceStart);

            if (triggers.Count <= 0)
            {
                return;
            }

            try
            {
                SetCurrentNode(node);
                node.Function.Invoke(chain);
            }
            catch (Exception e)
            {
                var messageBuilder = new StringBuilder();
                messageBuilder
                .Append(CurrentNodeExceptionHeader)
                .AppendLine(" threw an exception:")
                .AppendLine(e.Message)
                .AppendLine()
                .Append(UpdateChainAsString);
                ThrowUpdateError(new UpdateGraphException(messageBuilder.ToString(), e));
            }
        }
        private void RunUpdates(List <UpdateNode <TTrigger> > sortedNodes)
        {
            var triggers = new UpdateChain(this);

            foreach (var node in sortedNodes)
            {
                RunUpdate(node, triggers);
            }
        }