У меня есть следующий код. вызов connection.OpenAsync() завершает работу без каких-либо исключений. Даже в конечном итоге метод вызывающего абонента не вызывается. программа нацелена на .NET45. Любая идея?SqlConnection.OpenAsync() завершает работу без исключения исключения
Обновление: Вот родительский код, который работает с .Wait(). Он завершает работу без .Wait() в родительском коде, когда connection.OpenAsync() вызывается в дочернем методе ниже.
static void Main(string[] args)
{
UpdateSqlDatabase updateSqlDatabase = new UpdateSqlDatabase(args);
updateSqlDatabase.UpdateDatabaseSchemaAsync().Wait();
}
После серии метод асинхронной называет:
public async Task<T> ExecuteQueryAsync<T>(string connectionString, string commandText, IDictionary<string, object> parameters, Func<SqlDataReader, T> rowMapFunc)
{
using (var connection = new SqlConnection(connectionString))
{
try
{
await connection.OpenAsync();
}
catch (Exception ex)
{
}
SqlCommand command = connection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText = commandText;
if (parameters != null)
{
foreach (var item in parameters)
{
command.Parameters.AddWithValue(item.Key, item.Value);
}
}
SqlDataReader reader = await command.ExecuteReaderAsync();
T retObj = default(T);
while (await reader.ReadAsync())
{
retObj = rowMapFunc(reader);
}
return retObj;
}
}
Не делай этого: 'поймать (Exception) {}', вы снимаете себе в ногу. Каковы детали исключения, в конце концов? – Noseratio
, когда я отлаживаю код, никогда не доходит. Я добавил, что поймать, чтобы узнать, что было не так (не будет частью моего кода). По сути, я отлаживаю выполнение соединения. OpenAsync() просто завершает работу программы. то есть консольное приложение просто завершает работу без каких-либо ошибок/исключений. Блок catch никогда не попадает в этот код. – ksj
Изменить свой код следующим образом: http://pastebin.com/ZmsA3k4g. Установите точку останова на строках «A», «B», «C», «D» и запустите под отладчиком. Какие точки останова попадают? – Noseratio