0

我有一个数据库连接列表,其中只有一个是有效的。我的应用程序应该连接到它们并尝试根据输入的 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.Stop() 退出循环。但退出循环大约需要 15 秒。

难道我做错了什么?

谢谢

如果我使用 Parallel.For,PSI 会得到相同的结果

4

1 回答 1

2

您可能正在等待其他任务的连接失败。

尝试将连接超时设置为 2 秒。

Stop 不会强制停止其他任务,它只是阻止新任务启动。Parallel.ForEach 决定如何在任务之间划分工作。

更好的选择是使用Connection.OpenAsync取消令牌并使用Task.WaitAny().

于 2013-07-10T01:43:55.620 回答