У меня есть хранимая процедура, которая вызывает модель прогнозирования 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 секунды.