private async Task <CMPHttpResponse> PerformAsync() { if (_requestMessage == null) { return(null); } var httpResponseTask = Task.Run(async() => { try { HttpResponseMessage responseMessage = await _httpClient.SendAsync(_requestMessage, _tokenSource.Token); string responseRead = null; CMPHttpResponse httpResponse = null; if (responseMessage == null) { return(null); } if (responseMessage.StatusCode != HttpStatusCode.OK) { return(new CMPHttpResponse(responseMessage.ReasonPhrase, responseMessage.StatusCode, 0)); } responseRead = await responseMessage.Content?.ReadAsStringAsync(); httpResponse = new CMPHttpResponse(responseRead, responseMessage.StatusCode, 0); return(httpResponse); } catch (WebException exception) { var httpResponse = new CMPHttpResponse(exception.Message, 0, exception.Status); return(httpResponse); } catch (AggregateException exception) { var httpResponse = new CMPHttpResponse(exception.Message, 0, 0); return(httpResponse); } catch (Exception exception) { var httpResponse = new CMPHttpResponse(exception.Message, 0, 0); return(httpResponse); } }); await httpResponseTask; return(httpResponseTask.Result); }
public async Task GetBytesWithProgressAsync(ProgressCallback callback) { if ((_requestMessage == null) || (callback == null)) { return; } int noOfBytesRead = 0; int totalBytesToRead = 0; try { Task <HttpResponseMessage> httpResponseTask = Task.Run(async() => await _httpClient .GetAsync(_httpURLString, HttpCompletionOption.ResponseHeadersRead, _tokenSource.Token)); await httpResponseTask; HttpResponseMessage responseMessage = httpResponseTask.Result; Task <byte[]> responseByteTask = Task.Run(async() => await responseMessage.Content.ReadAsByteArrayAsync()); await responseByteTask; Task <Stream> responseStreamTask = Task.Run(async() => await responseMessage.Content.ReadAsStreamAsync()); await responseStreamTask; Stream responseStream = responseStreamTask.Result; byte[] responseBytes = responseByteTask.Result; totalBytesToRead = responseBytes.Length; string responseString = null; byte[] buffer = null; CMPHttpResponse httpResponse = null; while (true) { buffer = new byte[_chunkBufferSize]; int bytesRead = 0; bytesRead = await responseStream.ReadAsync(buffer, 0, buffer.Length); if (bytesRead == 0) { break; } noOfBytesRead += bytesRead; responseString = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead); httpResponse = new CMPHttpResponse(responseString, responseMessage.StatusCode, 0); callback.Invoke(httpResponse, noOfBytesRead, totalBytesToRead); } } catch (WebException ex) { var httpResponse = new CMPHttpResponse(ex.Message, 0, ex.Status); callback.Invoke(httpResponse, noOfBytesRead, totalBytesToRead); } catch (AggregateException ex) { var httpResponse = new CMPHttpResponse(ex.Message, 0, 0); callback.Invoke(httpResponse, noOfBytesRead, totalBytesToRead); } catch (Exception ex) { var httpResponse = new CMPHttpResponse(ex.Message, 0, 0); callback.Invoke(httpResponse, noOfBytesRead, totalBytesToRead); } }