微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#中处理异步HttpWebRequest异常的最佳方法是什么?

如何解决在C#中处理异步HttpWebRequest异常的最佳方法是什么?

| 我正在研究一些代码以异步使用HttpWebRequest。如果您以前曾经做过此事,那么您就会知道错误处理可能会有些痛苦,因为如果在一种回调方法中引发了异常,则无法通过a将其传递回调用代码。尝试/捕获块。 我想要做的是通过将异常保存在传递给每个回调方法的状态对象中来处理错误。如果捕获到异常,则将更新状态对象,然后中止http调用。我的问题是在状态对象中,我必须使用Exception属性,以便可以存储任何类型的异常。当调用代码检查状态对象并“看到”异常时,它不知道异常是什么类型。 有没有一种方法可以让我的状态对象保留任何类型的异常,但仍将异常保持为强类型? 状态对象
public class HttpPostClientAsyncModel
    {
        public HttpResponseSnapshot Response { get; set; }
        public HttpPostClientAsyncStatus Status { get; set; }
        public Exception Exception { get; set; }
        public WebRequest Request { get; set; }
    }
    

解决方法

异常对象仍然是强类型的,并保留其原始字段值。您所需要做的就是像这样检查它:
if (asyncModel.Exception is ArgumentException)
{
  // Handle argument exception here
  string invalidParameter = (asyncModel.Exception as ArgumentException).ParamName;
}
else if (...)
{
}
无论如何,您通常都会使用try / catch块进行非常类似的检查,因此这不会造成不便。如果您真的对此感到担心,只需使用sync方法创建一个新线程并使用继续选项处理异常:
Task.Factory.StartNew(() => { DoWork(); })
.ContinueWith(t => Logger.Error(\"An exception occurred while processing. Check the inner exception for details\",t.Exception),TaskContinuationOptions.OnlyOnFaulted);
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。