代码之家  ›  专栏  ›  技术社区  ›  Drew

C#控制台应用程序反复ping web API直到返回特定值的最佳实践

  •  0
  • Drew  · 技术社区  · 6 年前

    我有一个C#console应用程序,它通常作为Windows服务安装,但也可以在console模式下运行(这不是问题的关键,只是提供上下文)。当程序启动时,它向webapi发送一个请求,请求获取有关如何配置程序的数据。如果它寻找的数据不在那里,我希望它定期ping API,以防API最终获得配置数据。

    我想知道这样做的最佳做法是什么。下面是我心中的一个简单版本:

    Stopwatch sw = Stopwatch.StartNew();
    var response = null;
    while (true)
    {
        // Every 60 seconds, ping API to see if it has the configuration data.
        if (sw.Elapsed % TimeSpan.FromSeconds(60) == 0)
        {
            response = await PingApi();
            if (this.ContainsConfigurationData(response))
            {
                break;
            }
        }
    }
    this.ConfigureProgram(response);
    

    如果没有这些配置数据,程序中不会发生任何其他事情,所以像这样使用while循环和秒表应该没问题吧?不过,我不确定这是否是最佳做法。我也不确定我是否应该设置一个尝试次数的限制,如果达到这个限制会发生什么。我应该用秒表代替秒表吗线。睡觉?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Hector Montero    6 年前

    下面是一个使用计时器的示例。

    var timer = new System.Timers.Timer();
    
    timer.Interval = TimeSpan.FromSeconds(60).TotalMilliseconds;
    timer.Elapsed += async (sender, e) => 
    {
        timer.Stop();
    
        var response = await PingApi();
    
        if (ContainsConfigurationData(response))
        {
            ConfigureProgram(response);
        }
        else
        {
            timer.Enabled = true;
        }
    };
    timer.Enabled = true;
    
    Console.WriteLine("Press any key to continue...");
    Console.ReadKey();