我有一个循环(下面)根据用户输入循环N次.循环,调用一个方法,为插入数据库创建一个随机的文本字符串.我希望循环在执行查询之前调用此方法,因此每次插入数据库时都会有一个不同的随机字符串.
似乎正在发生的是,循环运行得太快,并且随机字符串被插入大约50次,因为动态字符串变量没有足够快地更新.但是,如果我输入Thread.Sleep(50),代码执行完美.
我不喜欢thread.sleep选项,因为我不知道它需要睡多久,如果我们开始运行几十万个事务,这个时间就会加起来.有没有人有一个很好的解决方案来确保方法在继续之前完全执行?
for (int i = 0; i < nLoop; i++)
{
rnd.RndName();
query.CommandText = "insert into XXX (col";
query.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
似乎正在发生的是,循环运行得太快,并且随机字符串被插入大约50次,因为动态字符串变量没有足够快地更新.
循环中的指令将一个接一个地执行.
除非rnd.RndName()触发一个单独的线程(在这种情况下显示该代码),否则它将在执行以下两个语句之前完成.
如果名称没有改变,问题出在其他地方.
但是,如果我抛出thread.sleep(50),代码执行完美.
您显示的代码中没有任何内容对线程睡眠敏感.如果这有一些影响,问题在于如何rnd.RndName()实施.也许你Random每次都在创建一个新实例(正如@rynah的评论中所建议的那样)?如果是,则使用系统时间初始化实例.这会导致你观察到的行为.
该Random班并没有真正产生随机数.它为给定的种子值生成确定的一系列数字.如果您接种到当前的滴答数(我认为Random这样做),Random快速连续创建多个实例将导致它们都具有相同的种子,因此产生完全相同的数字序列.