首页 > 解决方案 > 如何避免循环调用web api?

问题描述

我有两个 web api

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

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

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

标签: c#apiasp.net-web-apirestful-url

解决方案


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

理想情况下,您使用的是异步,因此您可以执行以下操作:

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);
}

推荐阅读