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