/// <summary>
        /// Process exception
        /// </summary>
        private void OnEventException(object value)
        {
            var request = AgentUtil.FetchPropertyUsingReflection(value, "Request");
            var status  = AgentUtil.FetchPropertyUsingReflection(value, "StatusCode");

            if (request is HttpWebRequest webRequest && status is HttpStatusCode httpStatusCode)
            {
                if (CurrentHttpWebRequests.TryRemove(webRequest, out var currentSubsegment))
                {
                    HttpRequestUtil.HandleStatus(httpStatusCode, currentSubsegment);
                    HttpRequestUtil.EndSubsegment(currentSubsegment);
                }
            }
        }
        private void OnEventStop(object value)
        {
            // The value passed in is not castable, use fetch from reflection instead.
            var request  = AgentUtil.FetchPropertyUsingReflection(value, "Request");
            var response = AgentUtil.FetchPropertyUsingReflection(value, "Response");

            if (request is HttpRequestMessage httpRequestMessage && response is HttpResponseMessage httpResponseMessage)
            {
                if (CurrentHttpRequestMessages.TryRemove(httpRequestMessage, out _))
                {
                    HttpRequestUtil.ProcessResponse(httpResponseMessage);
                    // End subsegment here
                    HttpRequestUtil.EndSubsegment();
                }
            }
        }
        /// <summary>
        /// Process http response
        /// </summary>
        private void OnEventStop(object value)
        {
            var request  = AgentUtil.FetchPropertyUsingReflection(value, "Request");
            var response = AgentUtil.FetchPropertyUsingReflection(value, "Response");

            if (request is HttpWebRequest webRequest && response is HttpWebResponse webResponse)
            {
                if (CurrentHttpWebRequests.TryRemove(webRequest, out var currentSubsegment))
                {
                    if (webResponse != null)
                    {
                        HttpRequestUtil.ProcessResponse(webResponse.StatusCode, webResponse.ContentLength, currentSubsegment);
                    }
                    HttpRequestUtil.EndSubsegment(currentSubsegment);
                }
            }
        }