У меня есть следующая конструкция:
Parallel.ForEach(Program.config.Root.Elements("databases"), el =>
{
try
{
DBConnection.OpenConnection(el.Attribute("database_alias").Value);
}
catch (Exception exc)
{
WriteLog(10, exc);
}
});
Эта конструкция используется для первоначального открытия соединений с базой данных. Но по причине итераций сторонних компонентов может зависать все приложение. Таким образом, мы улучшаем конструкцию и получаем новую:
Parallel.ForEach(Program.config.Root.Elements("databases"), el =>
{
try
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(DBConnection.OpenConnection));
t.Start(el.Attribute("database_alias").Value);
// Handling 50 seconds timeout
if (!t.Join(50000))
{
t.Abort();
// Force closing because connection is hanging with "connecting" state
Program.myConnections[el.Attribute("database_alias").Value].Conn.Close();
}
}
catch (Exception exc)
{
WriteLog(10, exc);
}
});
Но даже сейчас у нас есть живые темы во времени. Я вижу их подсчет суммы в диспетчере задач. Кто-нибудь знает, как с этим справиться?
Заранее спасибо!