public override async Task StopProfilingAsync()

in src/ServiceProfiler.EventPipe.Otel/Microsoft.ApplicationInsights.Profiler.Shared/Orchestrations/OrchestratorEventPipe.cs [131:190]


    public override async Task<bool> StopProfilingAsync(SchedulingPolicy policy, CancellationToken cancellationToken)
    {
        _logger.LogTrace("Stop profiling is requested by {sourceName}, threadId: {managedThreadId}", policy.Source, Thread.CurrentThread.ManagedThreadId);

        bool result;
        if (_currentProfilingPolicy == null)
        {
            _logger.LogTrace("Request stop profiling by {source} rejected. No profiling is running.", policy.Source);
            result = false;
        }
        else if (_currentProfilingPolicy != policy)
        {
            _logger.LogTrace("Stop profiling by {requestingSource} failed. The current profiling is requested by {currentSource}", policy.Source, _currentProfilingPolicy?.Source);
            result = false;
        }
        else
        {
            Task<bool> waitSemaphoreTask = _policyChangeHandler.WaitAsync(TimeSpan.FromSeconds(30), cancellationToken);
            try
            {
                _semaphoreTasks.Add(waitSemaphoreTask);
                if (await waitSemaphoreTask.ConfigureAwait(false))
                {
                    try
                    {
                        if (_currentProfilingPolicy == policy)
                        {
                            _logger.LogDebug("Stopping Profiler by {source}", policy.Source);
                            result = await _profilerProvider.StopServiceProfilerAsync(policy, cancellationToken).ConfigureAwait(false);
                            if (result)
                            {
                                _logger.LogDebug("Profiler stopped by {source}", policy.Source);
                                _currentProfilingPolicy = null;
                            }
                        }
                        else
                        {
                            _logger.LogTrace("Can't stop profiling requested by {newSource}.", _currentProfilingPolicy.Source);
                            result = false;
                        }
                    }
                    finally
                    {
                        _policyChangeHandler.Release();
                    }
                }
                else
                {
                    _logger.LogWarning("Can't get the handler to stop a profiling. Requested by {newSource}. Current Profiling by: {currentSource}", policy.Source, _currentProfilingPolicy?.Source);
                    result = false;
                }
            }
            finally
            {
                _semaphoreTasks.Remove(waitSemaphoreTask);
            }
        }

        return result;
    }