public override async Task StartProfilingAsync()

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


    public override async Task<bool> StartProfilingAsync(SchedulingPolicy policy, CancellationToken cancellationToken)
    {
        _logger.LogTrace("Start profiling is requested by {source}", policy.Source);

        if (policy is null)
        {
            throw new ArgumentNullException(nameof(policy));
        }

        Task<bool> waitSemaphoreTask = _policyChangeHandler.WaitAsync(TimeSpan.FromMilliseconds(500), cancellationToken);
        try
        {
            _semaphoreTasks.Add(waitSemaphoreTask);
            if (await waitSemaphoreTask.ConfigureAwait(false))
            {
                try
                {
                    if (_currentProfilingPolicy == null)
                    {
                        bool result = await _profilerProvider.StartServiceProfilerAsync(policy, cancellationToken).ConfigureAwait(false);
                        if (result)
                        {
                            _logger.LogDebug("Profiling is started. Source: {source}", policy.Source);
                            _currentProfilingPolicy = policy;
                        }

                        return result;
                    }
                    else
                    {
                        _logger.LogTrace("Profiling is running by policy: {source}", _currentProfilingPolicy.Source);
                    }
                }
                finally
                {
                    _policyChangeHandler.Release();
                }
            }

            _logger.LogTrace("Profiling is running by policy: {source}", _currentProfilingPolicy?.Source);
            return false;
        }
        finally
        {
            _semaphoreTasks.Remove(waitSemaphoreTask);
        }
    }