【发布时间】:2021-12-21 03:23:38
【问题描述】:
我有一个场景,我必须定期调用 API 来接收健康状态。
如果我使用一段时间会怎样?
while (true)
{
// API call
var health = _client.GetHealth(1).Result;
if (health)
{
some other work
}
Thread.Sleep(2000);
}
【问题讨论】:
-
一般来说,睡眠循环很少是一个好的解决方案。你可能想看看某种timer
-
首先,这是通过Health Checks 开箱即用的。其次,您不能只在控制器中创建睡眠循环或计时器。创建控制器实例是为了服务单个请求,最终将被垃圾收集。对于长时间运行的作业,您需要一个 BackgroundService。最后,
Thread.Sleep永远不应该在 Web 应用程序中使用。至少使用Task.Delay。 -
您可以使用hosted service,它在.net core 中可用。
-
@PanagiotisKanavos 我没有在 Controller 中调用这个 API
-
@RabnerCasandara 在这种情况下,您将不得不解释您真正想要什么。你在哪里叫它?实际的问题是什么?你为什么问这段代码是否可以? (不是,不要用.Result)
标签: c# asp.net-core asp.net-web-api health-check