private static async Task ProcessPostQueueRequest(PostWebRequestModel request)
        {
            using (var handler = new HttpClientHandler())
            {
                // Disable SSL checking
                handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
                {
                    return(true);
                };
                handler.AllowAutoRedirect        = true;
                handler.MaxAutomaticRedirections = 3;
                handler.MaxConnectionsPerServer  = 100;
                var content = new StringContent(JsonConvert.SerializeObject(request.Data), Encoding.UTF8, "application/json");
                try
                {
                    using (var client = new HttpClient(handler))
                    {
                        if (request.Headers != null && request.Headers.Count > 0)
                        {
                            foreach (var header in request.Headers)
                            {
                                client.DefaultRequestHeaders.Add(header.Key, header.Value);
                            }
                        }
                        var response = await client.PostAsync(request.Url, content, request.CancellationToken.Token);

                        using (var stream = await response.Content.ReadAsStreamAsync())
                        {
                            using (var reader = new StreamReader(stream, Encoding.UTF8))
                            {
                                var data = reader.ReadToEnd();
                                request.Callback(data);
                            }
                        }
                    }
                }
                catch (WebException ex)
                {
                    using (var stream = ex.Response.GetResponseStream())
                    {
                        using (var reader = new StreamReader(stream))
                        {
                            Console.WriteLine(reader.ReadToEnd());
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.Print(ex.ToString());
                }
                finally
                {
                    content.Dispose();
                }
            }
        }
 public static bool Post <T>(string url, T data, Action <string> callback, Dictionary <string, string> headers = null, int priority = 0, CancellationTokenSource cancelTokenSource = null)
 {
     try
     {
         var request = new PostWebRequestModel()
         {
             Url               = url,
             Callback          = callback,
             Priority          = priority,
             Headers           = headers,
             Data              = data,
             CancellationToken = cancelTokenSource == null
                 ? new CancellationTokenSource()
                 : cancelTokenSource
         };
         postQueue.TryAdd(request, 5000, request.CancellationToken.Token);
         return(true);
     }
     catch (Exception ex)
     {
         Debug.Print(ex.ToString());
         return(false);
     }
 }