internal static CallTargetReturn <TReturn> Invoke(TTarget instance, TReturn returnValue, Exception exception, CallTargetState state)
        {
            if (_continuationGenerator != null)
            {
                returnValue = _continuationGenerator.SetContinuation(instance, returnValue, exception, state);
            }

            if (_invokeDelegate != null)
            {
                CallTargetReturn <TReturn> returnWrap = _invokeDelegate(instance, returnValue, exception, state);
                returnValue = returnWrap.GetReturnValue();
            }

            return(new CallTargetReturn <TReturn>(returnValue));
        }
    internal static CallTargetReturn <TReturn> Invoke(TTarget instance, TReturn returnValue, Exception exception, CallTargetState state)
    {
        if (_continuationGenerator != null)
        {
            returnValue = _continuationGenerator.SetContinuation(instance, returnValue, exception, state);

            // Restore previous scope if there is a continuation
            // This is used to mimic the ExecutionContext copy from the StateMachine
            Activity.Current = state.PreviousActivity;
        }

        if (_invokeDelegate != null)
        {
            CallTargetReturn <TReturn> returnWrap = _invokeDelegate(instance, returnValue, exception, state);
            returnValue = returnWrap.GetReturnValue();
        }

        return(new CallTargetReturn <TReturn>(returnValue));
    }
        internal static CallTargetReturn <TReturn> Invoke(TTarget instance, TReturn returnValue, Exception exception, CallTargetState state)
        {
            if (_continuationGenerator != null)
            {
                returnValue = _continuationGenerator.SetContinuation(instance, returnValue, exception, state);

                // Restore previous scope if there is a continuation
                // This is used to mimic the ExecutionContext copy from the StateMachine
                if (((IDatadogTracer)Tracer.Instance).ScopeManager is IScopeRawAccess rawAccess)
                {
                    rawAccess.Active = state.PreviousScope;
                }
            }

            if (_invokeDelegate != null)
            {
                CallTargetReturn <TReturn> returnWrap = _invokeDelegate(instance, returnValue, exception, state);
                returnValue = returnWrap.GetReturnValue();
            }

            return(new CallTargetReturn <TReturn>(returnValue));
        }
            public Task <HttpResponseMessage> PublicSendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
            {
                Task <HttpResponseMessage> result = CachedResult;
                CallTargetState            state  = CallTargetState.GetDefault();
                CallTargetReturn <Task <HttpResponseMessage> > cReturn = CallTargetReturn <Task <HttpResponseMessage> > .GetDefault();

                Exception exception = null;

                try
                {
                    try
                    {
                        state = CallTargetInvoker.BeginMethod <HttpClientHandlerIntegration, HttpClientHandler, HttpRequestMessage, CancellationToken>(this, request, cancellationToken);
                    }
                    catch (Exception ex)
                    {
                        CallTargetInvoker.LogException <HttpClientHandlerIntegration, HttpClientHandler>(ex);
                    }
                    result = CachedResult;
                }
                catch (Exception ex)
                {
                    exception = ex;
                    throw;
                }
                finally
                {
                    try
                    {
                        cReturn = CallTargetInvoker.EndMethod <HttpClientHandlerIntegration, HttpClientHandler, Task <HttpResponseMessage> >(this, result, exception, state);
                        result  = cReturn.GetReturnValue();
                    }
                    catch (Exception ex)
                    {
                        CallTargetInvoker.LogException <HttpClientHandlerIntegration, HttpClientHandler>(ex);
                    }
                }
                return(result);
            }