Task.Delay()每天在循环中延迟 24 小时运行代码是否安全?我的代码是:
while (!token.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromDays(1), token);
await DoStuff(token);
}
Run Code Online (Sandbox Code Playgroud)
Task.Delay()以这种方式使用安全吗?
小智 6
包括您评论中的一些上下文,不,这不是 ASP.net Core 的安全方法,因为很可能您的进程将在 24 小时之前被回收。
对于这样的功能,您真的应该查看一个调度程序,该调度程序旨在将状态持久化到某种数据库中,并且比 Web 托管核心通常具有更长的生命周期。
Hangfire 是您正在寻找的非常完整的实现,请查看https://www.hangfire.io/。
如果您有兴趣自己构建一些东西,我建议您使用一个托管服务,它在 .NET Core 3+ 中受到了很多人的喜爱,并且现在非常可靠。这是微软的文档(https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio),这里有一篇不错的博客文章这给出了一个很好的演练,有一个具体的例子(https://wakeupandcode.com/worker-service-in-asp-net-core/)
您在这里想要的一般模式是有一个服务,它每 X 分钟检查一次即将到来的任务表,并在任务到期时运行必要的任务。然后,你上面的代码只需要在你的 DoStuff() 函数的适当时间进行调整以在你的表中放置一行。