首先,对不起我的英语。其次,我寻找其他解决方案(甚至是“SemaphoreSlim”,但是当我使用它时,所有任务都被抛出“任务被取消”异常)
我正在使用MS SQL,public static SqlConnection Connection
。
在此Connection
我想执行所有Sql任务,但这些任务可以在同一时间多次启动,
我们有一个功能:
private async object GetSomething()
{
try
{
using (var cmd = new SqlCommand("SELECT * FROM USERS WHERE id = 1;", Connection))
{
await Connection.OpenAsync();
var result = await cmd.ExecuteScalarAsync();
Connection.Close();
return result;
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
Connection.Close();
return null;
}
}
例如:在同一时间,我想要执行此功能两次
当第一次使用await Connection.OpenAsync();
时,没有问题,但是当此功能尚未完成时,
await Connection.OpenAsync();
将再次执行,它将抛出错误“Connection is not closed”;
这是因为Connection.Close()
未执行,因为程序正在等待来自var result = await cmd.ExecuteScalarAsync();
的第一个对象
所以我想避免这个问题,通过创建TasksManager,它将所有任务作为队列运行,并将正确的结果返回到等待函数的程序的一部分。有可能吗?
我希望你明白我想做什么。
//我做错了什么,你没有投票吗?