我正在开发一个使用。net框架和Nancyfx的Web API。
在某个特定的端点上,我想启动一个将在30分钟后执行的函数,并且我不希望其他函数等待它。
我希望这个函数是fire and forget(然后它在30分钟后执行)。
也许我可以这样做
private async Task LogExceptionsAsync(Func<Task> code)
{
try
{
await code();
}
catch(Exception exception)
{
m_log.Error("Call failed: " + exception.ToString());
}
}
int id = 1 //id of table
BackgroundTaskManager.Run(() => LogExceptionsAsync(() => DoUpdateOnTableAsync(id)));
但是这是一个好方法吗?
如果网站有很多请求给它带来负载怎么办?我应该关注什么?
主要问题是您的应用程序数据不是持久的。
如果您的应用程序因任何原因崩溃,作业将无法运行。
可以使用job像Hangfire这样的库可以通过SQL server或其他数据库调度作业并支持持久性。
一个延迟作业排队的例子:
var jobId = BackgroundJob.Schedule(
() => Console.WriteLine("Delayed!"),
TimeSpan.FromDays(7));