У меня есть приложение ASP.NET, где я использую порядковый номер из последовательности базы данных при создании записи в таблице с каркасом сущности. У меня есть хранимая процедура, которая извлекает следующее значение в этой последовательности, которое вызывается из фреймворка сущности, и я хочу, чтобы этот поиск был потокобезопасным.Получить номер последовательности номеров безопасно
Я использовал this ответ на попытку этого в следующем классе:
public static class SequenceNumber
{
private static object Lock = new object();
public static long Next(Context db)
{
long next = 0;
lock (Lock)
{
next = db.GetNextComplaintNumber().Single().Value;
}
return next;
}
}
Будет ли это обеспечить безопасность потоков?
Для чего? для области «GetNextComplaintNumber» да, но любой поток, вызывающий «Следующий», будет перемешаться с другими потоками. Если вы хотите, чтобы «GetNextComplaintNumber» вызывается только один раз, вы должны вместо этого полагаться на обработку транзакций базы данных. –
Последовательность базы данных должна всегда указывать уникальный номер, поэтому называть его не должно быть проблем, вызвав его из нескольких потоков, что вы думаете, может пойти не так? – Mant101
@ Manr101: Мне нужно, чтобы все числа были увеличены на 1 точно и с одним числом, которое никогда не пропускается. – Carel