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}>()");
}
}