我有一个存储过程,该存储过程根据输入的参数调用R预测模型。我需要并行执行此SP,因为对C#服务的单个请求将包含一个参数列表,并且如果我调用SP,则每个参数都将需要很长时间才能完成。
我使用以下代码
var tasks = new List<Task>();
foreach(var req in request)
{
tasks.Add(Task.Factory.StartNew(async() =>
await _repository.GetVolumePrediction(
JsonConvert.SerializeObject(req), tenantCode),
TaskCreationOptions.LongRunning));
}
await Task.WhenAll(tasks.ToArray());
GetVoulumePrediction
public async Task<double> GetVolumePrediction(string jsonInput, string tenantCode)
{
using (var connection = ConnectionFactory.GetConnection())
{
connection.Open();
_logger.Debug(this, "Conn opened");
SqlCommand command = connection.CreateCommand() as SqlCommand;
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@TenantCode", SqlDbType.NVarChar, 10)
.Value = tenantCode;
command.Parameters.Add("@jsonPredictionRequest", SqlDbType.NVarChar, -1)
.Value = jsonInput;
command.CommandTimeout = 0;
command.CommandText = "PredictVolume_MulWeek_MulAccountSku_New2";
predictedVolume = Convert.ToDouble(await command.ExecuteScalarAsync());
_logger.Debug(this, predictedVolume.ToString());
}
}
如果一次执行需要2秒钟,如果我当前启动10个任务,则需要花费20秒钟以上的时间才能完成,这不会产生并行执行的效果。我的期望是在2-4秒内得到结果。