-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FreeSqlCloud的change方法存在多线程并发问题 #10
Comments
试试在 change 之后打印 cloud.Ado.ConnectionString |
任务1:threadId=28 项目:项目1 项目:项目2 |
你是 asp.net core 吗?有没有用 async ,不要用 async void 这些,也不要不 await 的异步 |
运行入口在定时任务quarz中,quarz的Execute接口确实是async的 |
async void Method() {} //错误 async Task Method() { 确保完整的按顺序的执行上下文 |
现在入口写法是这样的 |
这个执行其中一个任务(相当于日志中threadId=28,任务1),还有其他任务实现Execute接口,写法也是这样 |
FreeSqlCloud 切换逻辑,看一下 AsyncLocal 的文章 |
监控日志
其中energy是主库,energy+项目Id是项目独立库,任务1是一个线程。其他任务每个任务也是一个线程。
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy -> energy2 //任务1输出调用change
project id = 2 //任务1输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy2 -> energy //其他任务输出调用change输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy -> energy2 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy2 -> energy3 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy3 -> energy4 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy4 -> energy6 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy6 -> energy //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy -> energy7 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy7 -> energy8 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy8 -> energy9 //其他任务输出
2024-12-04 09:00:00 【FreeSql.Cloud】数据库切换[Change] energy9 -> energy2 //其他任务输出
lastCals count = 1 //任务1输出(直接从固定表中查询行数),但是查询得到的数据并不是energy2库中表的,而是去查的energy8的数据。
如果把其他任务都注释掉,只留任务1运行,则数据正确,监控日志如下
2024-12-04 10:20:00 【FreeSql.Cloud】数据库切换[Change] energy -> energy2 //任务1输出
project id = 2 //任务1输出
lastCals count = 687 //任务1输出(直接从固定表中查询行数)
The text was updated successfully, but these errors were encountered: