У меня есть проблема со следующим кодом, когда T-SQL прок вызывает ошибку (SQLException)Щеголеватых SqlException и Никто не замеченное исключение
var result = await conn.QueryMultipleAsync("Inventory.uspLoadItems", new
{
dbId = obj.myId,
},
commandType: CommandType.StoredProcedure);
var items = await result.ReadAsync();
var specificItems = MyCustomMapper.MapTo<MyItem>((dynamic)items);
Я использую Dapper версию 1.50.2.
Процесс превращается в незаметное исключение.
Я могу следить за исключением вплоть до метода контроллера WebApi. Но когда существует метод контроллера, другой (нерезидентный и незавершенный) поток продолжает выполняться в (Текст удален из-за недопонимания в окне Parallell Stack. Исключение было не выполнено в ReadAsync, а не QueryMultipleAsync, и поэтому не продолжалось после исключения). Похож на проблему с резьбой в Dapper, но я не уверен.var items = await items.ReadAsync();
, даже если сеанс WebApi был завершен (собран GC?).
UPDATE
Я нашел следующую ссылку на Microsoft Connect, который, кажется, очень близкие к этой теме. https://connect.microsoft.com/VisualStudio/feedback/details/2592987/sqldatareader-nextresultasync-causes-unobserved-task-exception-even-when-awaited
Итак, для всех, кто испытывает такое поведение. Вам придется подождать следующего обновления .NET.
Не Щеголеватая проблемы, но если Dapper-contributers может найти временную работу вокруг, что было бы неплохо :)
Сейчас я меняю все мое ReadAsync читать (синхронно), чтобы избежать этого SqlDataReader ошибки.
не думаю, что это проблема с резьбой. Ожидайте результата. ReadAsync() будет вызываться в отдельном потоке, так как перед вами еще один ожидание. может уставить исключение здесь –
В «Async-Await» нет потока, кроме вызывающего потока, Check: http://blog.stephencleary.com/2013/11/there-is-no-thread.html –
Не могли бы вы попробуйте версию Sync 'QueryMultiple' и проверьте, наблюдается ли подобное исключение. В этом случае, как вы знаете, что сеанс веб-API - это сборник мусора (не существует способа узнать), просто теряется контекст. В фоновом режиме процесс ввода-вывода находится на том, что доступный обработчик отсутствует, он может дать незаметное исключение.Ожидаете ли вы в верхней части стека вызовов в контроллере Web API, что важно в этом случае, чтобы получить результат вызова. –