SemaphoreSlim向信号量添加给定计数将导致其超出它的最大计数报错问题
编程开发
SemaphoreSlim信号量添加超出最大计数
报错问题描述
近期在优化一个.NET程序的数据库并发操作导致的性能问题,原因是由于某些业务高峰时间段会有大量的数据触发数据库的并行线程更新写入操作,但由于服务其的配置比较拉跨,时不时会因为数据库资源不够用而出现更新写入数据超时失败的情况,导致时不时需要手动去补数据就很烦,所以引用了SemaphoreSlim来控制关于数据库的异步并发线程更新新增操作,来减少对数据库的压力。
测试过程中出现了问题 如题报错向信号量添加给定计数将导致其超出它的最大计数,百度上虽然找到了类似的问题,但没找到造成该问题的原因,经过不断的测试最终让我发现了问题原因(仅代表我自己的情况),其实就是自己写代码逻辑还是不够严谨导致
错误代码例子
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1);
var query = 1;//模拟测试条件
try
{
if (query == 1) return;//问题就出在在这里
semaphoreSlim.Wait();
//后续正常业务