Веб-метод реализует следующие вещи
//Job 1: Check max sequence: check the database tblA and find the max sequence
//Job 2: Create tblA: create tblA record where sequence = Job 1's sequence
//Job 3: Create tblB: create tblB record where created tblA an added field in it
Веб-метод принимает массив размера N.N раз Задания 1 - Задание 3 будет выполняться для каждого запроса.
Задания 2 и 3 будут находиться в той же области действия транзакции (откатить оба изменения в случае любой причины сбоя)
Работаетнормально, когда только 1 поток запрашивает этот API (синхронно)
Проблемы возникали, когда два потока запрашивали его одновременно
Если 2 потока запрашивают этот API, то Задание 1 имеет возможность вернутьсяДублированная максимальная последовательность
В случае, если оба 3 задания находятся в области транзакции, возникнет взаимоблокировка (должным образом, из-за того, что в потоке 1 найдено максимальное число tblA, и продолжается создание tblB (нужен созданный tblA).поток 2 пытается найти максимальную последовательность (нужен созданный потоком 1 tblA), во время создания таблицы tblA произошла тупиковая ситуация))
Ниже приведен код для поиска максимальной последовательности
public int GetMaxSequence()
{
var docList = pmsContext.tblA.Where().ToArray();
var doc = docList.OrderByDescending(x => x.Sequence).FirstOrDefault();
int seq = 1;
if (doc != null && doc.Sequence.HasValue)
seq = doc.Sequence.Value + 1;
return seq;
}
Есть лиспособ решить эту проблему?
Чтобы в задании 1 была найдена максимальная последовательность (без дубликатов), без тупиков.
Спасибо.