使用dapper的QueryAsync方法时,使用connection.OpenAsync()和connection.Open()有什么区别。connection.OpenAsync和connection.Open之间的区别使用Dapper QueryAsync方法时打开
异步:
public async Task<IList<Product>> GetListAsync()
{
using (var connection = new SqlConnection(_connectionString))
{
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT Id, Name ");
sql.AppendLine("FROM Product ");
await connection.OpenAsync();
var tickets = await connection.QueryAsync<Ticket>(sql.ToString());
return tickets.ToList();
}
}
不是异步:
public async Task<IList<Product>> GetListAsync()
{
using (var connection = new SqlConnection(_connectionString))
{
StringBuilder sql = new StringBuilder();
sql.AppendLine("SELECT Id, Name ");
sql.AppendLine("FROM Product ");
connection.Open();
var tickets = await connection.QueryAsync<Ticket>(sql.ToString());
return tickets.ToList();
}
}
所以使用OpenAsync有一个好处,而不是保持它主线程和可能阻塞的权利? –
@blakerivell是的,但一切都要看情况。基本上这个线程并不忙碌,它可以自由地做其他事情,比如响应点击按钮或显示进度条等,这取决于你如何使用空闲时间。如果你在空闲时间没有做任何事情,那么这是不利的。事实上,这是不好的,因为上下文切换需要时间,如果你在空闲时间内什么也不做,那么你没有理由切换上下文。 – CodingYoshi
如果10个独立用户单击一个从UI同时调用类似GetUserList的API方法的按钮,那么从Web API控制器一直到存储库使用异步方法会使我受益吗?我会承认是的,因为每个请求都可以在单独的线程上处理。否则,每次使用都必须等待先前的用户获得正确的响应? –