需要使用异步数据库请求返回SqlDataReader

3
下面的方法执行 SQL Server 数据库中的查询:
private bool authenticated(SqlConnection conn)
{
    string query = "some sql query";
    SqlCommand cmd = new SqlCommand(query, conn);

    // the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
    SqlDataReader reader = cmd.ExecuteReader();

    if (!reader.HasRows)
    {
       return false;
    }

    while (reader.Read())
    {
        // do some stuff
       /*
        if (some condition)
            return true;
       */
    }
}

执行查询的方法调用需要更改为异步版本。然而,该方法需要更改为async。这样的方法不能返回除voidTask之外的任何内容。考虑编写另一个仅用于查询执行的方法,但aysnc方法无法使用ref参数。那么,最好的解决方案是什么?


顺便提一下,SqlConnection类不是线程安全的。在异步请求挂起时,小心不要重用它。同时,确保在不再需要SqlConnection实例时将其释放。否则,您可能会遇到连接泄漏和连接池饥饿的问题。 - Theodor Zoulias
1个回答

3

Task<T> 可以返回您所需的内容。

private async Task<bool> authenticated(SqlConnection conn)
{
    string query = "some sql query";
    SqlCommand cmd = new SqlCommand(query, conn);

    // the intent is to change this to: SqlDataReader reader = await cmd.ExecuteReaderAsync();
    SqlDataReader reader = await cmd.ExecuteReaderAsync();

    if (!reader.HasRows)
    {
       return false;
    }

    while (reader.Read())
    {
        // do some stuff
        if (some condition)
            return true;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接