Dapper查询超时时间设置与CommandTimeout配置
时间:2026-06-16 | 作者:318050 | 阅读:0当然可以。Dapper 查询设置超时时间,核心就是 CommandTimeout 参数。它并不是 Dapper 自己搞的一套“超时逻辑”,而是直接透传给底层 ADO.NET 的 SqlCommand.CommandTimeout(单位:秒),由数据库驱动层真正执行中断或抛出异常。
直接在方法调用中指定超时
这是最常用、也最清晰的做法,优先级最高,会覆盖其他任何配置:
- 同步查询:
connection.Query(sql, param, commandTimeout: 20) - 异步查询:
await connection.QueryAsync(sql, param, commandTimeout: 30) - 执行非查询语句:
connection.Execute(sql, param, commandTimeout: 15)
全局默认超时设置
适合多数查询节奏一致的项目,省得每处都重复写参数。
设置一次即可全局生效:SqlMapper.Settings.CommandTimeout = 30;
该值为 int 类型,默认是 null,表示使用数据库连接自身的默认值(通常是 30 秒)。
需要注意的是,它会被方法级的 commandTimeout 覆盖,不会影响已显式传参的调用。
配合 CancellationToken 实现更可靠的超时控制
话虽如此,commandTimeout 只负责数据库命令级超时,连接建立、DNS 解析、网络抖动等环节它覆盖不到。
想要做到“最多等 20 秒”的端到端控制,推荐组合 CancellationToken:
- 创建带延迟的取消令牌:
var cts = new CancellationTokenSource(TimeSpan.FromSeconds(20)); - 传入异步方法:
await connection.QueryAsync(sql, param, commandTimeout: 15, cancellationToken: cts.Token);
这样一来,即使数据库命令本身没超时,整个操作也会在 20 秒后主动取消,避免线程或连接被卡住。
超时优先级与避坑提醒
Dapper 按以下顺序决定最终的超时值(从高到低):
- 方法参数中的
commandTimeout CommandDefinition构造时传入的CommandTimeout- 全局
SqlMapper.Settings.CommandTimeout - 连接字符串里的
Connect Timeout=XX(只影响连接建立,不等于命令超时) - ADO.NET 驱动默认值(如 SqlClient 默认 30 秒)
有一点必须警惕:不要设为 0(无限等待),很容易拖垮连接池。
高频简单查询建议 5–10 秒,报表类可以放宽到 60–120 秒。
真正需要注意的是:超时只是失败时的兜底方案,治本还得靠索引优化、SQL 重写和连接池监控。
来源:整理自互联网
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 春节全国快递停发及恢复揽收时间表
- 时间:2026-06-16
-
- 年免费顶级域名服务入口精选与获取技巧
- 时间:2026-06-16
-
- 年萝卜快跑加盟条件及费用要求
- 时间:2026-06-16
-
- 垂直同步有什么用?详解作用、原理与优缺点
- 时间:2026-06-16
-
- 如何在电脑BIOS中设置U盘或光驱为第一启动项
- 时间:2026-06-16
-
- A4纸尺寸是多少厘米和毫米
- 时间:2026-06-16
-
- Win7电脑建立局域网共享的详细步骤
- 时间:2026-06-16
-
- 来看小说网最新全文免费阅读官方网站入口
- 时间:2026-06-16
精选合集
更多大家都在玩
大家都在看
更多-
- 免费观看动漫的app下载地址推荐
- 时间:2026-06-15
-
- 手机邮箱app下载安装地址分享
- 时间:2026-06-15
-
- QQ浏览器常用网站设置教程 快速添加主页与导航
- 时间:2026-06-15
-
- QQ浏览器登录教程:手机电脑网页端详细步骤
- 时间:2026-06-15
-
- QQ浏览器主页无法修改的解决方法与操作步骤
- 时间:2026-06-15
-
- QQ浏览器广告过滤设置步骤详解
- 时间:2026-06-15
-
- 新手怎样自学办公软件合集
- 时间:2026-06-15
-
- QQ浏览器书签导出教程:详细步骤与图文指南
- 时间:2026-06-15