我有多线程操作,执行一系列任务。我面临的问题是网络服务,在压力很大的情况下可能会返回Timeout。
当处于沉重压力(超时)时,我希望该功能重试
Try
{
// Do some actions here
}
catch(WebException ex)
{
if (// Timeout)
{ //Retry }
else
{ // return error }
}
catch(Exception ex)
{ //return error }
来自MSDN在以下情况下可能会发生Webexception:
问题:
在我的异常处理中,如何分离这三个原因并单独输出TimeoutExceptions
而不使用该消息?
注意:我知道我可以增加timeout
来解决问题。但这并不能使我好奇。
感谢您的时间
答案 0 :(得分:1)
您可以检查Status属性,与web request status代码之一进行比较:
try {
}
catch(WebException ex) {
if (ex.Status == WebExceptionStatus.Timeout) {
// Retry logic
}
else {
// return error
}
}
另请参阅this post以获取重试逻辑的示例。请注意,Timeout
并不是触发重试的唯一原因(至少IMO ConnectionFailure
和ConnectionClosed
。)
答案 1 :(得分:1)
您可以查看异常的Status属性,该属性将包含异常的reason。
由于您正在使用某些与时间相关的行为,如果您在代码中使用某些测试,我建议您查看Reactive extensions;它允许您配置允许您轻松测试所需行为的事件链。请查看this question以获取一些示例,其中我希望某些事件重复发生的频率更高,以防您感兴趣。