如何避免循环调用 web api?
Posted
技术标签:
【中文标题】如何避免循环调用 web api?【英文标题】:How to avoid calling web api in loops? 【发布时间】:2020-08-20 04:35:01 【问题描述】:我有两个 web api
-
发布 API - 将数据从一个数据库复制到另一个数据库。完成该过程通常需要 10-15 分钟。
GetStatus API - 获取发布 API 的状态。有效状态为 Running、Failed 和 Completed。
现在,我正在调用 Publish API 然后在循环中我正在调用 GetStatus API 并且服务器加载了太多对 GetStatus API。每 10-15 毫秒调用一次 GetStatus api。
如何避免这种情况?任何更好的解决方案都应该受到高度赞赏。
【问题讨论】:
"现在,我将调用发布 API,然后循环调用 GetStatus API,服务器加载了太多的 GetStatus 请求。" - 什么?!? 你应该阅读How to Ask。 【参考方案1】:嗯...你应该在循环中等待...
理想情况下,您使用的是异步,因此您可以这样做:
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);
【讨论】:
缺少异步关键字。为什么我们只使用 await 关键字。请赐教 我只是说理想情况下您使用的是异步。如果不是,请改用第二个选项。你可以在这里阅读异步:docs.microsoft.com/en-us/dotnet/csharp/async以上是关于如何避免循环调用 web api?的主要内容,如果未能解决你的问题,请参考以下文章