异步代码里,可以有一种操作:
先异步执行这句查询:
var resTask = _repository.Where(w => w.Deleted == 0).ToListAsync();
...do something
然后在需要的地方调用等待,中间可以做很多其他·无关的事,提升效率,调用的时候:
var res = await resTask;
这样就是一种异步的甜头了。
坑在于:
调用的前后最好是放在一段代码里,不要类似如下:
var resTask = _repository.Where(w => w.Deleted == 0).ToListAsync();
if(ture)
{
var res = await resTask;
}
实测下来,这样的做法,第一次OK的,没问题,第二次就会触发上一次的连接,导致问题(可能是Mysql的专属,其余数据库不知道):
This MySqlConnection is already in use. See https://fl.vu/mysql-conn-reuse
程序里打断点一步步执行根本没用,看着OK的,但去掉断点就寄了。
我这里触发这个照道理应该逻辑上也不会触发,断点下执行OK,而且是特定的那条数据会触发,看到可能会异步后不调用,所以尝试改掉,果然,应该是这个问题。逻辑不能自洽,还得靠实践出真知。