如何使用ADO.NET ExecuteScalarAsync()在一个方法中异步执行三个独立的查询
本文关键字:执行 异步 三个 独立 查询 方法 何使用 ADO ExecuteScalarAsync 一个 NET | 更新日期: 2023-09-27 18:26:08
所以我试图将同步方法转换为asnych。设置是-我有一个方法来检查用户是否使用了公司的任何产品。我需要对每个产品进行不同的查询,所以我决定尝试一下asnych编程,因为我以前从未尝试过使用Task
和await
,尽管这可能不是一个完美的情况。但现在我已经将我的方法改为:
private static async Task<bool> isUsingProducts(int clientId)
{
bool hasProduct = false;
using (SqlConnection connection1 = new SqlConnection(connString))
{
SqlCommand firstProduct = new SqlCommand(firstQuery, connection1);
firstProduct.CommandTimeout = 300;
firstProduct.Open();
Task numberOfUsedProducts1 = firstProduct.ExecuteScalarAsync();
//int numberOfUsedProducts = (int)firstProduct.ExecuteScalar();
//if (0 < numberOfUsedProducts)
//{
// hasProduct = true;
//}
}
using (SqlConnection connection2 = new SqlConnection(connString))
{
SqlCommand secondProduct= new SqlCommand(secondQuery, connection2);
secondProduct.CommandTimeout = 300;
connection2.Open();
Task numberOfUsedProducts2 = secondProduct.ExecuteScalarAsync();
//int numberOfUsedProducts = (int)secondProduct.ExecuteScalar();
//if (0 < numberOfUsedProducts)
//{
// hasProduct = true;
//}
}
return hasProduct;
}
基本上,这是我尝试过的和以前同步方法留下的混合。在这种情况下,我只关心用户是否使用任何产品,所以我在每次查询结束后都会进行检查。然而,有时我需要实际的计数,所以最后我希望能够在asnych模式下执行查询,然后决定如何处理结果。
现在这个:
Task numberOfUsedProducts2 = secondProduct.ExecuteScalarAsync();
并没有给我一个错误,但我不知道如何继续。我不知道如何添加逻辑来检查每个查询的结果(查询是同步的,我怎么知道已经有结果了),以及如何将这些结果转换为实际类型(int
)?
ExecuteScalarAsync
返回一个Task<object>
。您可以将返回类型上的cast
与await
:结合使用
int numberOfUsedProducts1 = (int) await firstProduct.ExecuteScalarAsync()
if (numberOfUsedProducts > 0)
{
hasProduct = true;
}
第二种方法也是如此。
现在这个:
Task numberOfUsedProducts2 = secondProduct.ExecuteScalarAsync();
没有给我错误
这是因为Task<T>
继承自Task
,因此可以将其用作更抽象的基类,但随后会丢失包含返回的T
的Result
属性