【问题标题】:.NET Core REST API - run code after delay in another thread [duplicate].NET Core REST API - 在另一个线程中延迟后运行代码[重复]
【发布时间】:2022-01-14 05:48:02
【问题描述】:

我正在使用 c# .Net Core 3.1 开发一个项目。
延迟后我必须在哪里运行代码。

简要说明:
我用结束日期时间创建拍卖。
拍卖结束时,我必须运行一个功能(连接数据库、关闭拍卖品等)。
我可以创建更多这样的操作项,所以我必须在最早的项结束时运行这个函数。
在每个项目结束后,我必须将此时间(延迟)重置为下一个拍卖项目的日期时间。

所有这些我都希望在一个单独的线程中用于非阻塞主线程。

谢谢:-)

【问题讨论】:

  • 听起来不错。具体是什么阻止您这样做?
  • 我不知道如何运行和更改运行功能的延迟
  • 我认为Hangfire在这种情况下可能是一个很好的解决方案
  • 我查看了 Hangfire,但我不喜欢 SchedulePollingInterval 设置。我需要将此设置设置为 1 秒,我认为它不利于性能。
  • 在hangfire中您可以在提交后立即开始后台工作。 var jobId = BackgroundJob.Enqueue( () => Console.WriteLine("Fire-and-forget!")) hangfire.io

标签: c# .net asp.net-core asp.net-web-api


【解决方案1】:

如果您可以将其作为应用程序的一部分运行,请查看 background tasks in .NETCore 以运行这些任务。

如果您要求它们独立运行,例如您可能希望关闭您的网站但仍然让拍卖正确结束,您可以使用类似Azure WebJobs.

这里有一篇很好的比较文章; https://dotnetcoretutorials.com/2019/01/13/hosted-services-in-asp-net-core/

鉴于任务的频率,我建议您不要在流程的每个循环上加载数据。采取稍微不同的方法;

  • 在接下来的 X (10?) 分钟内加载任何拍卖,按结束日期排序
  • 一旦拍卖结束 == 现在,执行您需要的关闭操作
  • 每分钟一次,加载新数据(如果有)

【讨论】:

  • 我想将它作为应用程序的一部分运行。这次拍卖的结束时间是直接设定的,所以我必须每秒检查一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2022-11-11
相关资源
最近更新 更多