private void Handle()

in TeamCity.MSBuild.Logger/NodeLogger.cs [202:236]


        private void Handle<TBuildEventArgs>(IBuildEventHandler<TBuildEventArgs> handler, TBuildEventArgs e)
            where TBuildEventArgs : BuildEventArgs
        {
            if (e == null)
            {
                return;
            }

            // ReSharper disable once IdentifierTypo
            var reentrancy = Interlocked.Increment(ref _reentrancy) - 1;
            // ReSharper disable once AccessToModifiedClosure
            _diagnostics.Send(() => $"[{reentrancy} +] Handle<{typeof(TBuildEventArgs).Name}>()");
            try
            {
                lock (_lockObject)
                {
                    using (_eventRegistry.Register(e))
                    using (new HierarchicalContext(e.BuildEventContext?.NodeId ?? 0))
                    {
                        handler.Handle(e);
                    }
                }
            }
            catch (Exception ex)
            {
                var error = $"Exception was occurred while processing a message of type \"{e.GetType()}\":\n{ex}";
                _logWriter.Write(error);
                _diagnostics.Send(() => error);                
            }
            finally
            {
                reentrancy = Interlocked.Decrement(ref _reentrancy);
                _diagnostics.Send(() => $"[{reentrancy} -] Handle<{typeof(TBuildEventArgs).Name}>()");
            }
        }