【发布时间】:2019-06-27 10:39:13
【问题描述】:
我有一个 Azure 云服务,它在后台执行一些操作。我想执行一个无法确定执行时间的存储过程。所以请不要建议设置超时,因为有时它会在微秒内完成,而另一种运行可能需要超过一分钟。
我只需要触发存储过程执行并忘记它。但看起来我已经尝试了几种方法,但我找不到可行的解决方案。
我已经尝试了以下
var cmd = new SqlCommand("Purge_Data", connection)
{ CommandType = CommandType.StoredProcedure };
connection.Open();
Task.Run(() => cmd.ExecuteNonQueryAsync()));
cmd.BeginExecuteNonQuery(); 也根本没有触发存储过程。我已经用一个简单的控制台应用程序以及 .NET 4.6.1 进行了尝试。
请提出其他更好的方法
【问题讨论】:
-
“不建议设置超时时间”那么您认为我们还能如何帮助您?
-
@DavidG 我们正在处理大量数据,所以我很困惑设置最大超时
-
您遇到的另一个问题是
connection对象可能会在任务运行时被丢弃。您应该将所有内容包装在一个方法中并调用它。 -
任务是否需要向应用程序返回任何内容?如果没有,你能让它启动一个代理任务吗?然后您会得到确认任务已开始,但其余部分(由代理)在不同的会话中完成。
-
好吧,您显然缺少一些理解,因为 void 对异步的影响为零,除了您无论如何都没有捕获的异常。将超时设置为零是解决您的问题的一种解决方法,但这是一个超级危险的解决方法。如果我的一个开发人员提交了这样的代码,我会立即拒绝它并告诉他们寻找另一种方式。
标签: c# sql sql-server stored-procedures sql-server-2016