如何避免在循环中调用Web API?

问题描述

我有两个网络API

  1. 发布API-将数据从一个数据库复制到另一个数据库。通常需要10到15分钟才能完成该过程。
  2. GetStatus API-获取发布API的状态。有效状态为正在运行,失败和已完成。
  3. @H_404_11@

    现在,我正在调用 Publish API ,然后在循环中我正在调用 GetStatus API ,并且服务器加载了对 GetStatus API的太多请求。每隔10-15毫秒就会调用一次GetStatus api。

    如何避免这种情况?任何更好的解决方案都应该受到高度赞赏。

    解决方法

    嗯...你应该在循环中等待...

    理想情况下,您正在使用异步,因此您可以这样做:

    ApiStatus status = null;
    do {
        var status = await api.GetStatus();
        await Task.Deplay(TimeSpan.FromSeconds(5),cancellationToken);
      
    } while (status == ApiStatus.Running);
    

    或者如果不是这样的话

    while (!_stopEvent.WaitOne(TimeSpan.FromSeconds(5)){
        var status = api.GetStatus();
        if (status != ApiStatus.Running) break;
    }
    

    至少,天真的实现是您实际上不应该执行的,但是向您展示了最简单的情况...

    while (true){
        var status = api.GetStatus();
        if (status != ApiStatus.Running) break;
        Thread.Sleep(5000);
    }