当前位置:   article > 正文

记.NET HttpWebResponse异步获取返回数据的异常处理_httpwebresponse 异步

httpwebresponse 异步

 异常函数的写法:

  1. public static Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null)
  2. {
  3. try
  4. {
  5. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  6. if (headers != null)
  7. {
  8. foreach (var header in headers)
  9. request.Headers[header.Key] = header.Value;
  10. }
  11. using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  12. {
  13. Stream responseStream = response.GetResponseStream();
  14. StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
  15. return streamReader.ReadToEndAsync();
  16. }
  17. }
  18. catch (Exception ex)
  19. {
  20. return Task.FromResult(ex.Message);
  21. }
  22. }

异步调用以上函数,使用return streamReader.ReadToEndAsync()的结果时,可能会抛出以下异常提示:

Unable to read data from the transport connection: Operation canceled.

Specified argument was out of the range of valid values.

即异步IO 中的网络流是异步输入的,在await使用该方法的返回结果时,可能会遇到流还没读取完的情况,如果此时将结果字符串进行json反序列化的使用,可能会报遇到意外终止符等异常。

优化写法:

  1. public static async Task<string> HttpGetAsync(string url, Dictionary<string, string> headers = null)
  2. {
  3. try
  4. {
  5. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  6. if (headers != null)
  7. {
  8. foreach (var header in headers)
  9. request.Headers[header.Key] = header.Value;
  10. }
  11. var result=string.Empty;
  12. using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
  13. {
  14. using(Stream responseStream = response.GetResponseStream())
  15. {
  16. using(StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8))
  17. {
  18. result = await streamReader.ReadToEndAsync();
  19. streamReader.Close();
  20. }
  21. responseStream.Close();
  22. }
  23. response.Close();
  24. }
  25. return result;
  26. }
  27. catch (Exception ex)
  28. {
  29. return ex.Message;
  30. }
  31. }

使用await在函数内同步获取完全结果后,依次释放对象的使用和对流进行关闭。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/259504
推荐阅读
相关标签
  

闽ICP备14008679号