如果任务被取消固定次数,则重试Web API调用

时间:2018-11-02 07:11:24

标签: c# .net asynchronous task

继续this问题,如果任务被取消,我想做的是尝试重试同一Web API调用3次,因为该任务有时而不是每次都引发错误。

我写了以下内容:

int maxattempts = 3;
int attemptcount = 1;
try
{
    LogMessage("JobURL call start 1st time");
    response = await SendHttpRequest();
    LogMessage("JobURL call end");
}
catch (TaskCanceledException tex)
{
    attemptcount++;
    if (attemptcount < maxattempts){
            LogMessage("JobURL call start " + attemptcount.toString() + " time...");
            response = await SendHttpRequest();
    }   
}
catch (Exception ex2)
{
    LogMessage("Exception Details : " + ex2.Message);
    LogMessage("Exception StackTrace : " + ex2.StackTrace);
}

我从SendHttpRequest()方法中引发异常,在调用方法中,我正在检查异常的类型,如果是TaskCanceledException,则再次调用同一方法。现在,我想尝试3次,然后放弃。

所以我应该在catch块中再次编写try catch以进行第三次尝试。我以某种方式感到这是编写代码的非常粗略的方式。谁能指导我如何以有效的方式写这篇文章?非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以为此使用新的C#异常过滤器

类似的东西:

catch (Exception e) when (attemptcount < maxattempts)
{
}

这好像在maxattempts

之后根本不会捕获异常一样

例如参见https://www.thomaslevesque.com/2015/06/21/exception-filters-in-c-6/