view Implab/Diagnostics/ActivityScope.cs @ 255:b00441e04738 v3

Adde workaround to the behaviour of the logical operations stack in conjuction with async/await methods
author cin
date Wed, 04 Apr 2018 15:38:48 +0300
parents 34df34841225
children
line wrap: on
line source

using System;
using System.Diagnostics;

namespace Implab.Diagnostics {
    public class ActivityScope : IDisposable {
        readonly TraceSource m_source;

        readonly Guid m_prevId;

        readonly string m_activity;

        readonly int m_code;

        internal ActivityScope(TraceSource source, Guid prevId, int code, string activity) {
            m_source = source;
            m_prevId = prevId;
            m_code = code;
            m_activity = activity;
        }


        public void Dispose() {
            if (Trace.CorrelationManager.ActivityId != m_prevId)
                m_source.TraceTransfer(m_code, "Transfer", m_prevId);
            m_source.TraceEvent(TraceEventType.Stop, 0, m_activity);
            Trace.CorrelationManager.ActivityId = m_prevId;
        }
    }
}