【发布时间】:2015-08-13 23:47:05
【问题描述】:
我有一个 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的范围是的,但是任何调用Next的线程都会与其他线程混淆。如果你想确保GetNextComplaintNumber同时只被调用一次,你应该依赖数据库事务处理。 -
一个数据库序列应该总是给出一个唯一的编号,所以调用它应该没有问题,从多个线程调用它应该没有问题,你认为会出错的地方是什么?
-
@Manr101:我需要将所有数字精确地递增 1,并且永远不会跳过一个数字。
标签: c# multithreading thread-safety