我试图找到保持数据库更新的方法,但是这样做的方法耗费了大量时间,因此我尝试创建后台任务来执行此操作。
我搜索了解决方案,并阅读了本文中有关运行后台流程的不同选项:https://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx
但我不知道那些是最好的解决方案,就像我试图在应用程序之外执行它一样。我发现了一些关于创建Windows服务的东西,但我不知道如何,我没有找到一些好的例子。
每次访问应用程序时保持数据库更新的最佳方法是什么,而不会浪费它消耗的时间?如果你能帮助我看到光,我会非常感激。
答案 0 :(得分:2)
我对FluentScheduler非常满意,它正在处理我的所有关键任务计划。除了按计划发射作业外,它还可以按需执行,如下所示:
// Define your job in its own class
public abstract class MyJob : IJob
{
public void Execute()
{
// Do stuff here...
}
}
// Schedule your job at startup
var runAt = DateTime.Today.AddHours(1); // 1am
if (runAt<DateTime.Now)
runAt = runAt.AddDays(1);
Schedule<MyJob>()
.WithName("My Job Name") // Job name, required for manually triggering
.NonReentrant() // Only allow one instance to run at a time
.ToRunOnceAt(runAt) // First execution date/time
.AndEvery(1).Days().At(runAt.Hour, runAt.Minute); // Run every day at the same time
// To manually trigger your job
ScheduledJobRegistry.RunTaskAsync("My Job Name");
我在Windows服务中运行预定作业,并在需要时使用SignalR作为从MVC Web App远程触发它们的方法。
答案 1 :(得分:-1)
您可以使用异步方法。只需使用void而不是Task。
public async void LongRunningMethod () {
...
// Insert long running code here
...
}
然后调用它,它将在后台执行。请注意,如果没有正确处理,您可能会遇到隐藏的异常。
您还可以使用Hangfire这是一个非常棒的后台任务调度程序
以下是使用Hangfire运行每日任务的示例
RecurringJob.AddOrUpdate(() => Console.Write("Easy!"), Cron.Daily);