protected internal void HandleThreadsEvent(CLRRuntimeSource.ThreadMetrics metrics)
        {
            var activeWorkers  = metrics.MaxThreadPoolWorkers - metrics.AvailableThreadPoolWorkers;
            var activeCompPort = metrics.MaxThreadCompletionPort - metrics.AvailableThreadCompletionPort;

            _activeThreads.Record(default(SpanContext), activeWorkers, _threadPoolWorkerLabels);
            _availThreads.Record(default(SpanContext), metrics.AvailableThreadPoolWorkers, _threadPoolWorkerLabels);

            _activeThreads.Record(default(SpanContext), activeCompPort, _threadPoolComPortLabels);
            _availThreads.Record(default(SpanContext), metrics.AvailableThreadCompletionPort, _threadPoolComPortLabels);
        }
        protected internal void HandleThreadsEvent(CLRRuntimeSource.ThreadMetrics metrics)
        {
            var activeWorkers  = metrics.MaxThreadPoolWorkers - metrics.AvailableThreadPoolWorkers;
            var activeCompPort = metrics.MaxThreadCompletionPort - metrics.AvailableThreadCompletionPort;

            StatsRecorder
            .NewMeasureMap()
            .Put(activeThreadsMeasure, activeWorkers)
            .Put(availThreadsMeasure, metrics.AvailableThreadPoolWorkers)
            .Record(threadPoolWorkerTagValues);

            StatsRecorder
            .NewMeasureMap()
            .Put(activeThreadsMeasure, activeCompPort)
            .Put(availThreadsMeasure, metrics.AvailableThreadCompletionPort)
            .Record(threadPoolCompPortTagValues);
        }