gpt4 book ai didi

c# - Dapper SqlException 和 Unobserved 异常

转载 作者:行者123 更新时间:2023-11-30 12:22:37 25 4
gpt4 key购买 nike

当 T-SQL 过程引发错误 (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 Controller 方法。 但是当 Controller 方法存在时,即使 WebApi session 已终止(收集 GC? ... ).看起来像是 Dapper 中的线程问题,但我不确定。

更新

我在 Microsoft Connect 上找到了以下链接,它似乎与该主题高度相关。 https://connect.microsoft.com/VisualStudio/feedback/details/2592987/sqldatareader-nextresultasync-causes-unobserved-task-exception-even-when-awaited

因此,对于遇到这种行为的任何其他人。您将不得不等待下一个 .NET 更新。

这不是 Dapper 的问题,但如果 Dapper 的贡献者能找到一个临时的解决方法,那就太好了 :)

现在我将所有 ReadAsync 更改为 Read(同步)以避免此 SqlDataReader 错误。

最佳答案

another (spawn and unfinished) thread continue to execute at var items = await items.ReadAsync();

听起来所有这些代码都存在于异步执行的函数中,不等待或以其他方式同步。当此函数仍在运行时主请求完成(这不是猜测,通过您的观察证明代码在 Controller 完成后执行)。然后,如果此代码崩溃,则不会观察到异常。

忽略未观察到的异常将是错误的修复。我建议无论如何都这样做,但正确的解决方法是等待此代码所属的任务。

因为仍在运行的是您的代码,所以它不是框架错误。您链接到的错误可能会导致框架代码稍后执行且不被察觉,但它不会导致您等待运行后的语句(再次)。

关于c# - Dapper SqlException 和 Unobserved 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40284205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com