c# - Asp.net Mvc 和 Web api 中的调度

标签 c# asp.net sql-server asp.net-mvc

我正在开发一个使用 Asp.net MVC 5 和 Web api 以及 SQL Server 的项目。我应该实现一个需要调度的功能。

我在这个系统中有一些用户,每个用户都可以注册订单,并且我将订单信息保存在数据库中。

问题:对于 2 分钟后在系统中注册的每个订单,我应该向其所有者发送消息并通知他订单状态。

注册后2分钟如何查看每个订单的状态?

我应该为每个已注册的订单安排一个任务吗? (每秒可能超过 500 个订单,所以我认为这不是一个好的解决方案)

我想要一个能够以良好性能处理此问题的解决方案。

最佳答案

您的最佳解决方案是 Hangfire

Hangfire 就是为了应对此类挑战而构建的。你有多少份工作其实并不重要。配置 Hangfire 后,您只需将方法传递到队列即可。您还可以使用 TimeSpan 延迟执行

BackgroundJob.Schedule(
() => Console.WriteLine("Delayed!"),
TimeSpan.FromMinutes(2));

您甚至可以链接作业,如果您的订单流程中有多个步骤,这非常方便:

BackgroundJob.Schedule(() => {

    SomeProcessToComplete();

},TimeSpan.FromMinutes(2));

static void SomeProcessToComplete(){

     //after code runs add another job to the queue
    BackgroundJob.Schedule(
    () => Console.WriteLine("Delayed!"),
    TimeSpan.FromMinutes(2));
}

关于c# - Asp.net Mvc 和 Web api 中的调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46043050/

相关文章:

c# - mono 未找到 View 'Index' 或其主视图

c# - ASP.Net 网站中的全局数据

sql-server - 在 sql server 的 xpath 中使用变量

c# - 您如何满足 WebApi 查询字符串中的 AND 和 OR 搜索?

c# - 从 Windows 8/WinRT 中的不同线程更新 UI 元素

c# - 为什么我的网站经常卡住?

sql - MSSQL - 有没有一种方法可以在将条目添加到另一个表时自动将条目添加到一个表?

c# - 更改 ComboBox 的选定项时如何触发 INotifyPropertyChanged 处理程序?

c# - Linq:获取票数最高的文章

SQL Server : select where row was X but is not now X