在一个请求中有一个函数,它只会在.net中运行30分钟



我正在开发一个使用。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));

最新更新