相关疑难解决方法(0)

如果遇到错误,如何重新运行try块?

可能重复:
C#最简单的写入重试逻辑的方法?

我有一个功能包含服务器的Web服务调用,由于网络中的一些干扰,有时会失败(无法连接远程服务器错误).代码在try catch块中.我想在try块中重新运行Web服务调用,以便成功完成Web调用.

c#

4
推荐指数
2
解决办法
1万
查看次数

如何在满足某些条件之前重试

我需要重试一个特定的方法,直到它返回一个非空的Guid.

有一个很棒的答案,根据是否有异常重试; 但是,我想概括这个类能够处理任何指定的条件.

当前用法将执行特定次数的操作,直到没有例外:

Retry.Do(() => SomeFunctionThatCanFail(), TimeSpan.FromSeconds(1));
Run Code Online (Sandbox Code Playgroud)

要么:

Retry.Do(SomeFunctionThatCanFail, TimeSpan.FromSeconds(1));
Run Code Online (Sandbox Code Playgroud)

要么:

int result = Retry.Do(SomeFunctionWhichReturnsInt, TimeSpan.FromSeconds(1), 4);
Run Code Online (Sandbox Code Playgroud)

如何修改此类,使其根据我传入的函数的返回值重试?

例如,如果我想重试,直到我的函数返回3:

Retry.Do(() => SomeFunctionThatCanFail(), TimeSpan.FromSeconds(1)).Until(3);
Run Code Online (Sandbox Code Playgroud)

这意味着每1秒执行一次SomeFunctionThatCanFail(),直到SomeFunctionThatCanFail()= 3?

在满足条件之前,我如何概括Retry.Do的用法?

public static class Retry
{
   public static void Do(
       Action action,
       TimeSpan retryInterval,
       int retryCount = 3)
   {
       Do<object>(() => 
       {
           action();
           return null;
       }, retryInterval, retryCount);
   }

   public static T Do<T>(
       Func<T> action, 
       TimeSpan retryInterval,
       int retryCount = 3)
   {
       var exceptions = new List<Exception>();

       for (int retry = 0; …
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio

2
推荐指数
1
解决办法
873
查看次数

C# 重试逻辑 While 循环

我在完成重试逻辑代码时遇到了一些麻烦。但是,我无法找出缺失的部分。当失败时如何捕获并记录并使用计时器再次重试。

这是我的代码。

while (true)
{
    var res = await this.httpClientWrapper.......

    if (res.IsSuccessStatusCode)
    {
        var result = await res.Content.......
        this.logger.Info($".......
    }

    if (result.status == "Succesed")
    {
        return true;
    }
    else
    {
        var resContent = await.......
        this.logger.Info($.......
        await Task.Delay(2000).ConfigureAwait(false);
        throw new Exception(resContent);
    }                    
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net

0
推荐指数
1
解决办法
3258
查看次数

Can I make a method in C# to try-catch a line of code?

Is it possible to create a method/extension to try-catch a piece of code within some brachets? For example:

public static void TryCatchrep(//CODEHERE)
    {
        bool t;
        do
        {
            try
            {
                //CODEHERE
                t = true;
            }
            catch
            {
                //ERROR
                t = false;
            }
        } while (t == false); //Repeats on catch
        
    }
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
75
查看次数

标签 统计

c# ×4

.net ×1

asp.net ×1

visual-studio ×1