问题描述
我有两个网络API
- 发布API-将数据从一个数据库复制到另一个数据库。通常需要10到15分钟才能完成该过程。
- GetStatus API-获取发布API的状态。有效状态为正在运行,失败和已完成。 @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);
}