c# - 如何避免循环调用web api?
问题描述
我有两个 web api
- 发布 API——将数据从一个数据库复制到另一个数据库。完成该过程通常需要 10-15 分钟。
- GetStatus API -获取发布 API 的状态。有效状态为正在运行、失败和已完成。
现在,我正在调用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);
}
推荐阅读
- c# - 将 WPF 数据网格导出到 PDF 文件
- java - 无法从其他片段加载片段
- javascript - PHP 和 Javascript 问题。函数总是返回最后一个值
- bitcoinj - Bitcoinj get transactions from blockchain
- powershell - PowerShell 读取 csv 文件并相应地创建文件
- c++ - 如何重构重复的控制结构?
- r - 如何从知道相机像素分辨率、焦距和高度的照片开始计算 R 中的叶面积?
- python - 无法解析树莓派上的主机地址
- javascript - [Vue 警告]:渲染错误:“TypeError:无法读取属性 'id' of null”
- c# - 在 c# 和 c++ 之间将 double 类型的二维多维数组作为输入和输出的 pinvoke 编组