我在我的应用程序上运行多个线程,在每个线程中我需要从帐户中获取一个随机的Dictionary项。现在我知道当然有一段时间你会从一本小字典中得到同一个项目,但这本字典有超过一千个项目而且我仍然得到非独特的结果?
我的意思是什么?我的意思是它会给出随机结果但通常会重复
示例:
Picked the random username "aidan913"
Picked the random username "aidan913"
Picked the random username "abbiexox9"
Picked the random username "phelan193"
Picked the random username "pbeters92"
所以它有时会重复两次,但实际上并没有给出一个完全独特的项目。当然必须有一种方法来获得至少9/10次的独特项目?
public KeyValuePair<int, BotInformation> GetAccount()
{
var account = new KeyValuePair<int, BotInformation>();
var rand = new Random();
var randomlyOrdered = _accounts.OrderBy(i => rand.Next());
lock (locker)
{
foreach (KeyValuePair<int, BotInformation> entry in randomlyOrdered)
{
if (!entry.Value.Usable())
continue;
account = entry;
}
}
if (!CoreUtilities.IsDefault(account)) // if it found one, update it?
{
using (var databaseConnection = Program.GetServer().GetDatabaseManager().GetConnection())
{
databaseConnection.SetQuery("UPDATE `accounts` SET `last_used` = '" +
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' WHERE `username` = '" + account.Key + "' LIMIT 1");
}
account.Value.LastUsed = DateTime.Now;
}
return account;
}
答案 0 :(得分:1)
这是你的问题
public KeyValuePair<int, BotInformation> GetAccount()
{
var account = new KeyValuePair<int, BotInformation>();
var rand = new Random();
当你快速使用新的Random()时,它会有相同的键 新的Random()仅一次并使用它。
private var rand = new Random();
public KeyValuePair<int, BotInformation> GetAccount()
{
var account = new KeyValuePair<int, BotInformation>();
答案 1 :(得分:0)