Сначала исходный вызов:
Код: Выделить всё
private async void ComprobarConexiones()
{
List cheks = new List();
Task tGICO = Task.Run(() => BDManager.ChekConnectionGICO());
Task tWIP = Task.Run(() => BDManager.ChekConnectioniMove());
cheks.Add(tGICO);
cheks.Add(tWIP);
while (cheks.Count != 0)
{
Task completedTask = await Task.WhenAny(cheks);
if (completedTask == tGICO)
{
HabilitarMenusGICO(tGICO.Result);
}
else if (completedTask == tWIP)
{
HabilitarMenusWIP(tWIP.Result);
}
cheks.Remove(completedTask);
}
}
Код: Выделить всё
public static bool ChekConnectionGICO()
{
return GetInstanceGICO().ChekConnection(2);
}
public bool ChekConnection(int intentos = 1)
{
if (impersonated)
{
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(GetCadenaConexion());
return ImpersonationHelper.Impersonate(sb.UserID, sb.Password, () =>
{
return CheckConectionLogic(intentos);
});
}
return CheckConectionLogic(intentos);
}
private bool CheckConectionLogic(int intentos = 1)
{
try
{
SqlConnection testConexion = GetSQLConn();
if (!PingHost(testConexion.DataSource.Split('\\')[0]))
{
return false;
}
testConexion.Open();
if (testConexion.State == ConnectionState.Open)
{
#region testSelect
string testSelect = @"SELECT COUNT(*) 'Tablas'
FROM sys.all_objects T
WHERE T.is_ms_shipped = 0
AND T.type IN ('U', 'V')";
#endregion testSelect
SqlDataAdapter adaptador = new SqlDataAdapter(testSelect, testConexion);
SqlCommandBuilder build = new SqlCommandBuilder(adaptador);
DataTable dtTable = new DataTable();
adaptador.Fill(dtTable);
if (dtTable.Rows[0][0].ToString() == "0")
{
return false;
}
testConexion.Close();
return true;
}
else
{
intentos--;
if (intentos == 0)
{
return false;
}
else
{
return CheckConectionLogic(intentos);
}
}
}
catch
{
intentos--;
if (intentos == 0)
{
return false;
}
else
{
return CheckConectionLogic(intentos);
}
}
}
I Я совершенно уверен, что проблема как-то связана с тем, как процесс вызывается через ЗАДАЧУ (в других частях программы код вызывается синхронно и работает нормально), но мне не удалось ее решить. Есть предложения?
Подробнее здесь: https://stackoverflow.com/questions/792 ... on-in-task
Мобильная версия