asp.net模拟多用户并发产生不重复递增单号的方法
2010-08-24 17:06
706 查看
asp.net模拟多用户并发产生不重复递增单号的方法,往往我们在开发程序、调试程序时,无法模拟多用户同时操作的实际环境下的运行情况。
为了模拟多用户并发操作,我们先写个多线程的例子来充分模拟多用户并发的情况
代码
class SequenceTest
{
/// <summary>
/// 定义委托
/// </summary>
/// <param name="user">用户</param>
delegate void MakeSequenceDelegate(string user);
/// <summary>
/// 这里是测试序列
/// </summary>
/// <param name="user">用户</param>
private void MakeSequence(string user)
{
for (int i = 0; i < 10; i++)
{
BaseSequenceManager sequenceManager = new BaseSequenceManager();
// 模拟2010年7月份的订单编号产生
System.Console.WriteLine(user + ":" + sequenceManager.GetSequence("Order201007"));
}
}
/// <summary>
/// 这里是模拟多用户同时点击
/// </summary>
public void DoTest()
{
// 模拟3个用户的并发操作
MakeSequenceDelegate sequenceDelegate1 = new MakeSequenceDelegate(MakeSequence);
sequenceDelegate1.BeginInvoke("user1", null, null);
MakeSequenceDelegate sequenceDelegate2 = new MakeSequenceDelegate(MakeSequence);
sequenceDelegate2.BeginInvoke("user2", null, null);
MakeSequenceDelegate sequenceDelegate3 = new MakeSequenceDelegate(MakeSequence);
sequenceDelegate3.BeginInvoke("user3", null, null);
}
}
序列表的设计效果如下图,表中存储了当前是什么序列的序号为多少等信息。
由于没进行并发控制,程序的输出情况如下,当然在单用户操作测试时,是不太可能测试出并发情况下的运行状态的。
这里会有重复序列急丢失序列的情况会发生,并不能保证多用户并发时,能完全产生唯一的订单编号。
为什么会发生并发问题? 因为你在读的时候,我也在读,你在更新序列时,我也在更新序列,因为相同的程序在运行多份,用户1,2同时都读到了0007这个序号。
本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/net/aspnet/20100708/8706.html
为了模拟多用户并发操作,我们先写个多线程的例子来充分模拟多用户并发的情况
代码
class SequenceTest
{
/// <summary>
/// 定义委托
/// </summary>
/// <param name="user">用户</param>
delegate void MakeSequenceDelegate(string user);
/// <summary>
/// 这里是测试序列
/// </summary>
/// <param name="user">用户</param>
private void MakeSequence(string user)
{
for (int i = 0; i < 10; i++)
{
BaseSequenceManager sequenceManager = new BaseSequenceManager();
// 模拟2010年7月份的订单编号产生
System.Console.WriteLine(user + ":" + sequenceManager.GetSequence("Order201007"));
}
}
/// <summary>
/// 这里是模拟多用户同时点击
/// </summary>
public void DoTest()
{
// 模拟3个用户的并发操作
MakeSequenceDelegate sequenceDelegate1 = new MakeSequenceDelegate(MakeSequence);
sequenceDelegate1.BeginInvoke("user1", null, null);
MakeSequenceDelegate sequenceDelegate2 = new MakeSequenceDelegate(MakeSequence);
sequenceDelegate2.BeginInvoke("user2", null, null);
MakeSequenceDelegate sequenceDelegate3 = new MakeSequenceDelegate(MakeSequence);
sequenceDelegate3.BeginInvoke("user3", null, null);
}
}
序列表的设计效果如下图,表中存储了当前是什么序列的序号为多少等信息。
由于没进行并发控制,程序的输出情况如下,当然在单用户操作测试时,是不太可能测试出并发情况下的运行状态的。
这里会有重复序列急丢失序列的情况会发生,并不能保证多用户并发时,能完全产生唯一的订单编号。
为什么会发生并发问题? 因为你在读的时候,我也在读,你在更新序列时,我也在更新序列,因为相同的程序在运行多份,用户1,2同时都读到了0007这个序号。
本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/net/aspnet/20100708/8706.html
相关文章推荐
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- C# ASP.NET B/S模式下,采用lock语法 实现多用户并发产生不重复递增单号的一种解决方法技术参考
- ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考
- ASP.NET防用户重复登录的方法
- asp.net访问网络路径方法(模拟用户登录)
- ASP.net防止用户后退、刷新造成重复提交的方法研究
- Asp.net防止论坛用户重复登录的方法
- asp.net访问网络路径方法(模拟用户登录)
- asp.net防止用户多次重复登录的方法
- ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)
- Asp.net如何防止论坛用户重复登录的方法?