Parallel.For每次停止或中断花费的时间太长
本文关键字:时间 中断 For Parallel | 更新日期: 2023-09-27 18:21:55
我有一个数据库连接列表,其中只有一个是有效的。我的应用程序应该连接到它们,并尝试根据输入的userId获取用户信息。
private string GetDatabaseId(string userId)
{
string dbId = string.Empty;
Parallel.ForEach(dictionaryAllDatabases, (db, state) =>
{
user = GetUserFromDatabase(db.Key, userId);
if (user != null)
{
//we found user in database.set the db.Id and exit the loop
//it takes only 500 milliseconds to hit this line
dbId = db.Key;
state.Stop();
return;
}
}
);
//after about 15 seconds, we reach here
.....
}
它只需要不到500毫秒就可以找到有效的数据库,然后我调用state。停止()以退出循环。但是退出循环大约需要15秒。
我做错什么了吗?
感谢
p.S.如果我使用Parallel,我会得到同样的结果。对于
您可能正在等待其他任务的连接失败。
尝试将连接超时设置为2秒。
停止不会强制停止其他任务,它只是阻止新任务启动。Parallel.ForEach决定如何在任务之间划分工作。
更好的选择是将Connection.OpenAsync
与取消令牌一起使用,并使用Task.WaitAny()
。