BackgroundService.StartAsync,是否应在启动或阻止期间完成?

问题描述

我不知道我是否会错过这个难题,但是就我通常使用服务的情况而言,对List的任何调用都应该总是返回,以便您知道您的服务已启动。

我正在学习Start
Background tasks with hosted services in ASP.NET Core
Implement background tasks in microservices with IHostedService and the BackgroundService class

在这两个示例中,它们都使用BackgroundService来实现ExecuteAsync(由{{1} }})只会在取消后(例如应用程序关闭时)返回。

StartAsync

这与我对服务的了解相矛盾,因为您如何分辨服务已成功启动还是挂起?

我真的很感谢在此方面的一些澄清,因为我似乎无法完全了解正在发生的事情,而且我似乎也找不到任何针对此的进一步信息。

编辑:添加了从while loopExecuteAsync的呼叫以进行说明:

StartAsync

解决方法

通过 async 的魔力,尽管 ExecuteAsync 看起来是一个无限循环,但它实际上会向调用者返回一个 Task。 Delay 上的 await 允许控制流离开 ExecuteAsync 函数,循环的下一次迭代仅在 Task 解析后运行。

如果不习惯,很容易错过。