Я нашел проблему.Это был не метод GetXlsProformaEpsByCveShcp, который не был потокобезопасным.Чтобы решить эту проблему, я использовал не Parallel.ForEach, а List , затем добавил все задачи и дождался асинхронного завершения всех задач.Я проверил метод (который вызывает базу данных) и увидел, что вызов процедуры находится внутри блока try catch.Когда метод вызывается синхронно, исключение никогда не происходит.Но когда метод выполняется 79 раз в асинхронном режиме, в соединении возникает тайм-аут.Итак, это было решено только путем добавления большего количества времени к свойствам TimeOut объекта SqlCommand.
Наконец, вот как я изменяю свой код
var asyncBagTask = new List<Task>();
var ConcurrentlistXls = new ConcurrentBag<ReporteXlsPippPrfE>();
foreach (var records in findItem)
{
asyncBagTask.Add(Task.Run(() =>
{
var item = _plantillaPippBs.GetXlsProformaEpsByCveShcp(records.ftClaveCarteraSHCP);
if (item != null)
{
ConcurrentlistXls.Add(item);
}
}));
}
Task.WaitAll(asyncBagTask.ToArray());
Спасибо всем.