我有一个在 .Net 4.0 VS2010 环境中在 MVC 4 中运行的项目。我需要处理一个长时间运行的 sql 任务,而不需要让用户在前端等待那么久。MVC 4 Web 应用程序调用业务层,该业务层调用数据层方法,该方法使用如下代码片段执行 SP。
public DataSet ExecuteSP()
{
dbc = database.GetStoredProcCommand('long_running_sp');
dbc.CommandTimeout = 300;
foreach (SPParams p in spParams)
{
dbc.Parameters.Add(new SqlParameter(p.ParamName, p.ParamValue));
}
DataSet ds = _database.ExecuteDataSet(dbc);
return ds;
}
我尝试的两个选项是使用一个明显不起作用的同步控制器,另一个是使用异步控制器。我发现在数据层调用存储过程后,这两个选项都挂起了我的网站。然后我在我的 AsyncController 中引入了 Task.Factory.StartNew 方法。有效。然后我在我的同步控制器中应用了同样的方法,它也在那里工作。
现在的问题是:如果我只需要应用 Task.Factory.StartNew,那么为什么还要使用 AsyncController?或者更好的是为什么不完全放弃 Task.Factory.StartNew 而只是使用Service Broker Activation
这里有什么更好的选择?