最近在写WebApi接口,遇到一些问题,总结一下。这些问题未必跟WebApi有关系,比较琐碎。
问题现象:一个接口被多次调用,可以认为是多线程调用接口,接口内部使用了C#的Async Await,代码形如:1
2
3
4
5
6
7
8
9
10return new GetXResponse
{
A= await A.GetAAsync(xx),
B= await B.GetBAsync(xx),
C= await C.GetCAsync(xx),
D= await D.GetDAsync(xx),
E= await E.GetEAsync(xx),
F= await F.GetFAsync(xx),
G= await G.GetGAsync(xx)
};
犯了一个错误,A、B、C、D等等都会连接数据库,连接数据库的代码,使用using不当1
2
3
4using (Connection)
{
return (await conn.QueryAsync<T>(sql, parms)).ToList();
}
Connection是在构造函数完成的初始化 new MySqlConnection,多线程调用时,using未及时回收数据库连接,修改如下之后,该异常可修复。1
2
3
4using (var conn = new MySqlConnection(ConnString))
{
return (await conn.QueryAsync<T>(sql, parms)).ToList();
}