public Task <INetworkResponseMessage> HttpPostAsync(TargetUri targetUri, HttpContent content, NetworkRequestOptions options)
        {
            if (targetUri is null)
            {
                throw new ArgumentNullException(nameof(targetUri));
            }
            if (content is null)
            {
                throw new ArgumentNullException(nameof(content));
            }

            return(Task.Run <INetworkResponseMessage>(async() =>
            {
                using (var handler = GetHttpMessageHandler(targetUri, options))
                    using (var httpClient = GetHttpClient(targetUri, handler, options))
                    {
                        var httpMessage = await httpClient.PostAsync(targetUri, content);
                        var response = new NetworkResponseMessage(httpMessage);

                        if (httpMessage.Content != null)
                        {
                            await response.SetContent(httpMessage.Content);
                        }

                        return response;
                    }
            }));
        }
        public Task <INetworkResponseMessage> HttpHeadAsync(TargetUri targetUri, NetworkRequestOptions options)
        {
            if (targetUri is null)
            {
                throw new ArgumentNullException(nameof(targetUri));
            }

            return(Task.Run <INetworkResponseMessage>(async() =>
            {
                using (var httpMessageHandler = GetHttpMessageHandler(targetUri, options))
                    using (var httpClient = GetHttpClient(targetUri, httpMessageHandler, options))
                        using (var requestMessage = new HttpRequestMessage(HttpMethod.Head, targetUri))
                        {
                            // Copy the headers from the client into the message because the framework
                            // will not do this when using `SendAsync`.
                            foreach (var header in httpClient.DefaultRequestHeaders)
                            {
                                requestMessage.Headers.Add(header.Key, header.Value);
                            }

                            var httpMessage = await httpClient.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
                            var response = new NetworkResponseMessage(httpMessage);

                            if (httpMessage.Content != null)
                            {
                                await response.SetContent(httpMessage.Content);
                            }

                            return response;
                        }
            }));
        }