使用多个连接的Tasks从c#并行执行相同的存储过程,但响应时间不佳

时间:2018-10-23 09:06:03

标签: c# sql-server-2016

我有一个存储过程,该存储过程根据输入的参数调用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秒内得到结果。

0 个答案:

没有答案