假设我有一个使用数据库的应用程序。每当此应用程序启动时,它会将数据库备份到某个位置。而这个备份过程需要花费太多时间。
为了使gui响应,我会使用异步等待。像这样;
public async Task BackupDataBase(){
using(SqlCommand command = new SqlCommand(@"BACKUP DATABASE [MyDatabase] TO DISK = 'C:\....\MyDatabase.bak'"), connection)
{
await command.ExecuteNonQueryAsync();
}
}
我的问题是;我的应用程序可以使用相同的连接来查询其他一些东西,而无需锁定吗?或者我应该在异步方法工作时锁定连接吗?
答案 0 :(得分:0)
即使您新建了SqlConnection,您实际上也是在SqlConnection类内部维护的连接池中请求可能存在的实例。
一般来说,它不会被阻止。您可以将最大池大小限制为一,但这很可能会导致您的大多数应用程序变得非常无响应,并且在Web应用程序中会自杀。
考虑到sql语句的性质,sql服务器通常很擅长保持适当的锁,我的猜测是你的代码可以工作。
从您的应用程序中进行备份可能有点不同寻常,如果您将应用程序水平扩展到多个Web服务器,它将变得一团糟。
那么sql server上的预定任务怎么样?