我有多线程操作,它执行一系列任务。我面临的问题是一个when服务,当压力很大时,它可能返回一个超时。
当压力很大时(超时),我希望重试这个函数。
Try
{
// Do some actions here
}
catch(WebException ex)
{
if (// Timeout)
{ //Retry }
else
{ // return error }
}
catch(Exception ex)
{ //return error }在MSDN中,Webexception可以在以下情况下发生:
问题:在我的异常处理中,如何在不使用消息的情况下分离这三个原因并单独挑出TimeoutExceptions?
注意:,我知道我可以增加timeout来解决这个问题。但这并不能平息我的好奇心。
谢谢您抽时间见我
发布于 2014-09-29 08:56:11
与状态代码之一相比,您可以检查web请求状态属性:
try {
}
catch(WebException ex) {
if (ex.Status == WebExceptionStatus.Timeout) {
// Retry logic
}
else {
// return error
}
}有关重试逻辑的示例,请参见这个职位。请注意,Timeout并不是触发重试的唯一原因(至少ConnectionFailure和ConnectionClosed也是如此)。
发布于 2014-09-29 08:57:07
您可以查看异常的状态属性,它将包含异常的正确原因。
由于您使用的是一些与时间相关的行为,如果您在代码中使用了一些测试,我建议您查看一下反应性扩展;它允许您配置事件链,使您能够轻松地测试所需的行为。以这个问题为例,我希望某些事件在发生错误时重复频率更高,您可能会对此感兴趣。
https://stackoverflow.com/questions/26095929
复制相似问题