【发布时间】:2018-09-17 14:39:54
【问题描述】:
我有一个每月运行的 T-SQL 存储过程,大约需要 48 小时才能完成。我单击客户端应用程序上的按钮以调用 C# .NET Core API 上的路由。 API 然后调用存储过程。我不希望它以任何形式或方式等待。我在函数周围添加了Task.Run()。
Task.Run(() => db.Database.ExecuteSqlCommand("dbo.storedProcedure"));
这会根据需要立即成功地向客户端返回响应,但是 API 仍在后台等待此过程。
有没有一种方法可以调用该过程并让 API 完全完成它?我只想启动它,让它纯粹在数据库上运行。对于这种情况,我不关心捕获错误或其他可能被视为良好做法的操作。
【问题讨论】:
-
避免让客户端手动创建作业。考虑服务器端作业(SQL Server 代理、Windows 计划任务等)。如果您需要编写代码,有很好的 .net 调度程序,例如 quartz
-
我尝试使用 Azure runbooks/scheduler 启动存储过程,但它似乎每隔几个小时就会重新启动一次连接,在整个过程中将存储过程弄乱了一小部分。此外,我组织中的用户正在选择何时从客户端运行该过程。我打算研究使用 SQL 代理。
-
Core中有Background tasks,样本为on-demand execution。但最终,如果应用程序由于某种原因重新启动,此调用仍将终止。
标签: c# sql-server linq tsql asp.net-core